MissingSecret [MissingSecretError]:请在生产中定义一个“秘密”

Sai*_*das 7 next.js vercel next-auth

根据文档https://next-auth.js.org/configuration/options#secret,添加NEXTAUTH_SECRET作为环境变量,您不必定义此选项。

但在 vercel 制作中我仍然得到,

2022-03-24T10:37:19.571Z    710a4b4b-24d3-4fb4-b991-9eb44179efc8    ERROR   [next-auth][error][NO_SECRET] 
https://next-auth.js.org/errors#no_secret Please define a `secret` in production. MissingSecret [MissingSecretError]: Please define a `secret` in production.
    at assertConfig (/var/task/node_modules/next-auth/core/lib/assert.js:24:14)
    at NextAuthHandler (/var/task/node_modules/next-auth/core/index.js:34:52)
    at NextAuthNextHandler (/var/task/node_modules/next-auth/next/index.js:16:51)
    at /var/task/node_modules/next-auth/next/index.js:52:38
    at Object.apiResolver (/var/task/node_modules/next/dist/server/api-utils/node.js:182:15)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
    at async NextNodeServer.runApi (/var/task/node_modules/next/dist/server/next-server.js:386:9)
    at async Object.fn (/var/task/node_modules/next/dist/server/base-server.js:488:37)
    at async Router.execute (/var/task/node_modules/next/dist/server/router.js:228:32)
    at async NextNodeServer.run (/var/task/node_modules/next/dist/server/base-server.js:600:29) {
  code: 'NO_SECRET'
}
Run Code Online (Sandbox Code Playgroud)

环境设置为NEXTAUTH_SECRET=MYSECRETSNAPBOOK

代码:

export default NextAuth({
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    }),
  ],
  pages: {
    signIn: '/auth/signin',
  },
  callbacks: {
    async session({ session, token, user }) {
      session.user.username = session.user.name
        .split(' ')
        .join('')
        .toLocaleLowerCase()

      session.user.uid = token.sub

      return session
    },
  },
})
Run Code Online (Sandbox Code Playgroud)

Sai*_*das 5

这是修复方法,

  1. 在 .env 文件(或你的 vercel env)中添加NEXT_PUBLIC_SECRET=anything(确保你有NEXT_PUBLIC_SECRET名称)

  2. 在 [...nextauth].js 中添加秘密选项

providers: [//Your providers],

secret: process.env.NEXT_PUBLIC_SECRET

  1. 确保您不使用 7beta 版本。升级或降级至 4.1.2 ( npm i next-auth@4.1.2)

  • 这不会造成安全缺陷/漏洞吗?https://nextjs.org/docs/basic-features/environment-variables#exusing-environment-variables-to-the-browser (12认同)