@sidebase/nuxt-auth 是一个搭配 Nuxt3
使用的项目鉴权插件,其功能是基于 【Authjs】实现的,因此很多配置项与 Authjs
相同。
ps: Authjs支持的功能比较多,所以一般都采用
Authjs
方案,但@sidebase/nuxt-auth
在使用 @sidebase/nuxt-auth
时,需要配置一些基本配置项,可以参考官方文档:https://auth.sidebase.io/guide/authjs/quick-start
其中基础配置项为:
tsexport 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
会尝试按以下顺序查找应用程序的来源(来源):
环境变量和
runtimeConfig
使用AUTH_ORIGIN
环境变量或(runtimeConfig.authOrigin
如果已设置)名称可以自定义,请参阅originEnvKey。baseURL
根据提供的计算origin得出。请参阅此处的实现。export default defineNuxtConfig({ auth: { baseURL: `http://localhost:${process.env.PORT || 3000}` } })
- 仅限开发:自动从传入的
HTTP
请求中
当服务器以开发模式运行时,NuxtAuth
可以从传入的请求中自动推断它。提示:这样做只是为了您的方便 - 请确保在生产中设置正确的原点。
如果上述步骤之后仍然无效,
AUTH_NO_ORIGIN
则生产时会抛出错误。
总结一下官方说明,可以通过两种方式配置 ORIGIN
,如果配置在生产环境无效,则会报错。
NUXT_AUTH_ORIGIN
:sh# 生产环境别忘了改
NUXT_AUTH_ORIGIN="http://localhost:9910/api/auth"
origin
的环境变量 key
:在 nuxt 配置文件中增加 originEnvKey
配置,如:
tsexport default defineNuxtConfig({
auth: {
originEnvKey: 'NUXT_YOUR_ORIGIN'
},
runtimeConfig: {
yourOrigin: ''
}
})
AUTH_ORIGIN
环境变量直接配置,就不用再配置 originEnvKey
了,结果发现并不是这么回事,必须配置 originEnvKey
才能生效,不知道是老狗打开方式不对还是BUG?。。。通过 auth.baseUrl
配置项,直接指定url,如果没有单独配置 origin
环境变量,则会默认使用 baseUrl
为 origin
。配置如下:
tsexport default defineNuxtConfig({
auth: {
baseURL: https://localhost:3001/api/auth",
},
})
baseUrl
也可以使用环境变量配置,如:baseURL: process.env.NUXT_AUTH_ORIGIN
这一个配置高这么复杂干嘛,一种方式固定配置得了呗,文档虽然写了这么多,但写 origin
这个配置干啥用的至今也没找到相关说明。。。。
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!