使用@sidebase/nuxt-auth开发项目部署时报错AUTH_NO_ORIGIN解决
## 简介 [@sidebase/nuxt-auth](https://auth.sidebase.
渲染中...
## 简介
[@sidebase/nuxt-auth](https://auth.sidebase.io/) 是一个搭配 `Nuxt3` 使用的项目鉴权插件,其功能是基于 【[Authjs](https://authjs.dev/)】实现的,因此很多配置项与 `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
```
根据这个错误信息可以知道,开发环境可以忽略这个错误,但是如果你看到这里就不管了,生产环境不做处理必然会报错,那么如何解决呢?
<!-- more -->
## 官方说明
根据错误信息提示打开网址,可以看到关于 `AUTH_NO_ORIGIN` 错误的如下说明:
> `AUTH_NO_ORIGIN` 将在开发期间显示为警告消息,并在生产期间抛出为错误,从而停止应用程序。可以安全地忽略开发警告 - 它只是为您以后的生产部署提供提醒。
>
> `AUTH_NO_ORIGIN` 当您未设置应用程序的来源时,就会发生这种情况。`NuxtAuth` 会尝试按以下顺序查找应用程序的来源(来源):
>
> 1. 环境变量和`runtimeConfig`
> 使用 `AUTH_ORIGIN` 环境变量或(`runtimeConfig.authOrigin`如果已设置)名称可以自定义,请参阅[originEnvKey](https://auth.sidebase.io/guide/application-side/configuration#originenvkey)。
>
> 2. baseURL
> 根据提供的计算origin得出。请参阅[此处](https://github.com/sidebase/nuxt-auth/blob/9852116a7d3f3be56f6fdc1cba8bdff747c4cbb8/src/runtime/helpers.ts#L9-L23)的实现。
> ```
> export default defineNuxtConfig({
> auth: {
> baseURL: `http://localhost:${process.env.PORT || 3000}`
> }
> })
> ```
> 3. 仅限开发:自动从传入的 `HTTP` 请求中
> 当服务器以开发模式运行时,`NuxtAuth` 可以从传入的请求中自动推断它。
>
> 提示:这样做只是为了您的方便 - 请确保在生产中设置正确的原点。
>
> 如果上述步骤之后仍然无效,`AUTH_NO_ORIGIN` 则生产时会抛出错误。
### 总结
总结一下官方说明,可以通过两种方式配置 `ORIGIN`,如果配置在生产环境无效,则会报错。
## 解决
### 直接环境变量
1. 配置环境变量,如`NUXT_AUTH_ORIGIN`:
```sh
# 生产环境别忘了改
NUXT_AUTH_ORIGIN="http://localhost:9910/api/auth"
```
2. 指定 `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` 环境变量,则会默认使用 `baseUrl` 为 `origin`。配置如下:
```ts
export default defineNuxtConfig({
auth: {
baseURL: https://localhost:3001/api/auth",
},
})
```
- 补充:`baseUrl` 也可以使用环境变量配置,如:`baseURL: process.env.NUXT_AUTH_ORIGIN`
## 吐槽
这一个配置高这么复杂干嘛,一种方式固定配置得了呗,文档虽然写了这么多,但写 `origin` 这个配置干啥用的至今也没找到相关说明。。。。
END
评论
登录后查看和发表评论
前往登录