2024-12-21
温故知新
00

目录

简介
问题
官方说明
总结
解决
直接环境变量
配置baseUrl
吐槽

简介

@sidebase/nuxt-auth 是一个搭配 Nuxt3 使用的项目鉴权插件,其功能是基于 【Authjs】实现的,因此很多配置项与 Authjs相同。

ps: Authjs支持的功能比较多,所以一般都采用 Authjs 方案,但 @sidebase/nuxt-auth

问题

在使用 @sidebase/nuxt-auth 时,需要配置一些基本配置项,可以参考官方文档:https://auth.sidebase.io/guide/authjs/quick-start

其中基础配置项为:

ts
export default defineNuxtConfig({ modules: ['@sidebase/nuxt-auth'], auth: { provider: { type: 'authjs', trustHost: false, defaultProvider: 'github', addDefaultCallbackUrl: true } } })

配置上述内容后,即需要根据 @sidebase/nuxt-auth 官方文档编写登录接口,具体内容再次不赘述,有需要可自行查阅。

之后就可以正常启动测试,但是启动时大概率会报错:

ℹ AUTH_NO_ORIGIN: No origin - this is an error in production, see https://sidebase.io/nuxt-auth/resources/errors. You can ignore this during development

根据这个错误信息可以知道,开发环境可以忽略这个错误,但是如果你看到这里就不管了,生产环境不做处理必然会报错,那么如何解决呢?

官方说明

根据错误信息提示打开网址,可以看到关于 AUTH_NO_ORIGIN 错误的如下说明:

AUTH_NO_ORIGIN 将在开发期间显示为警告消息,并在生产期间抛出为错误,从而停止应用程序。可以安全地忽略开发警告 - 它只是为您以后的生产部署提供提醒。

AUTH_NO_ORIGIN 当您未设置应用程序的来源时,就会发生这种情况。NuxtAuth 会尝试按以下顺序查找应用程序的来源(来源):

  1. 环境变量和runtimeConfig 使用 AUTH_ORIGIN 环境变量或(runtimeConfig.authOrigin如果已设置)名称可以自定义,请参阅originEnvKey

  2. baseURL
    根据提供的计算origin得出。请参阅此处的实现。

export default defineNuxtConfig({ auth: { baseURL: `http://localhost:${process.env.PORT || 3000}` } })
  1. 仅限开发:自动从传入的 HTTP 请求中
    当服务器以开发模式运行时,NuxtAuth 可以从传入的请求中自动推断它。

提示:这样做只是为了您的方便 - 请确保在生产中设置正确的原点。

如果上述步骤之后仍然无效,AUTH_NO_ORIGIN 则生产时会抛出错误。

总结

总结一下官方说明,可以通过两种方式配置 ORIGIN,如果配置在生产环境无效,则会报错。

解决

直接环境变量

  1. 配置环境变量,如NUXT_AUTH_ORIGIN
sh
# 生产环境别忘了改 NUXT_AUTH_ORIGIN="http://localhost:9910/api/auth"
  1. 指定 origin 的环境变量 key

在 nuxt 配置文件中增加 originEnvKey配置,如:

ts
export default defineNuxtConfig({ auth: { originEnvKey: 'NUXT_YOUR_ORIGIN' }, runtimeConfig: { yourOrigin: '' } })
  • 补充:本来以为 AUTH_ORIGIN 环境变量直接配置,就不用再配置 originEnvKey 了,结果发现并不是这么回事,必须配置 originEnvKey 才能生效,不知道是老狗打开方式不对还是BUG?。。。

配置baseUrl

通过 auth.baseUrl 配置项,直接指定url,如果没有单独配置 origin 环境变量,则会默认使用 baseUrlorigin。配置如下:

ts
export default defineNuxtConfig({ auth: { baseURL: https://localhost:3001/api/auth", }, })
  • 补充:baseUrl 也可以使用环境变量配置,如:baseURL: process.env.NUXT_AUTH_ORIGIN

吐槽

这一个配置高这么复杂干嘛,一种方式固定配置得了呗,文档虽然写了这么多,但写 origin 这个配置干啥用的至今也没找到相关说明。。。。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!