繁体   English   中英

next-auth SignIn 有什么变化吗? (有一天它停止工作)

[英]Did something changed with next-auth SignIn? (One day it stopped working)

几个月来,我一直在使用 Next 12.0.10 和 next-auth 4.1.2 完美运行的登录页面,但最近它停止工作了。

我登录:

  const onSubmit = async ({ email, password }) => {
    try {
      const { ok, error } = await signIn("normal-login", { redirect: false, email: email, password: password, callbackUrl: process.env.LOGIN_CALLBACK_URL})
      console.log('ok, error: ', ok, error)
      if(ok) {
        console.log('Sesión iniciada correctamente')
      } else {
        console.log('error: ', error)
        setCredentialError('Email o contraseña inválidos')
      }
    } catch (error) {
      console.log('error: ', error)
    }
  }

但是现在{ ok, error }分别返回falsesessionRequired 并触发setCredentialError('Email o contraseña inválidos') 但奇怪的是,当我刷新页面时,登录成功,我被重定向到我的主页。 这让我认为 cookies 设置正确,但我的 signIn function 有问题。

这是我的[...nextauth].js文件:

import NextAuth from "next-auth"
import CredentialsProvider from "next-auth/providers/credentials"
import { login } from "../axios/auth"
import jwt_decode from "jwt-decode";

export default NextAuth({
  // Configure one or more authentication providers
  providers: [
    CredentialsProvider({
      id: "normal-login",
      name: "normal credentials",
      credentials: {
        email: {
          label: "Email",
          type: "email"
        },
        password: {
          label: "Password",
          type: "password"
        }
      },
      async authorize(credentials) {
        try {
          const res = await login({
            user: {
              email: credentials.email,
              password: credentials.password
            }
          })

          const { token } = res.data
          const token_decoded = jwt_decode(token)

          const user = {
            id: token_decoded.id,
            email: credentials.email,
            name: token_decoded.full_name,
            role: token_decoded.role,
            image: token_decoded.avatar,
            token: token
          }

          return user
        } catch(error) {
          console.log("error: ", error)
        }
        return null
      }
    }),
    CredentialsProvider({
      id: "admin-login",
      name: "admin credentials",
      credentials: {
        username: {
          label: "Email",
          type: "email",
          placeholder: "nombre@test.com"
        },
        password: {
          label: "Password",
          type: "password"
        }
      },
      async authorize(credentials) {
        try {
          const res = await login({
            user: {
              email: credentials.email,
              password: credentials.password
            }
          })
          const { token } = res.data
          const token_decoded = jwt_decode(token)

          const user = {
            id: token_decoded.id,
            email: credentials.email,
            name: token_decoded.full_name,
            role: token_decoded.role,
            image: token_decoded.avatar,
            token: token
          }

          return user
        } catch(error) {
          console.log("error: ", error)
        }
        return null       
      }
    })
    // ...add more providers here
  ],
  callbacks: {
    jwt: ({ token, user }) => {
      // first time jwt callback is run, user object is available

      if (user) {
        token.token = user.token
        token.uid = user.id
      }
      if (user?.role) {
        token.role = user.role
      }
      if (user?.image) {
        token.image = user.image
      }

      return token
    },
    session: ({ session, token }) => {
      // session callback is called whenever a session for that particular user is checked
      if (token) {
        session.token = token.token
        session.user.uid = token.uid
      }
      if (token?.role) {
        session.user.role = token.role
      }
      if (token?.image) {
        session.user.image = token.image
      }
      console.log('session: ', session)
      return session
    },
  },
  session: {
    strategy: "jwt",

    // Seconds - How long until an idle session expires and is no longer valid.
    maxAge: 30 * 24 * 60 * 60, // 30 days
  },
  secret: process.env.NEXTAUTH_SECRET,
  pages: {
    signIn: "/user/login" || "/admin/login"
  }
})

我查看了 next-auth 是否有任何变化,但找不到任何东西。 任何帮助,将不胜感激。 谢谢!

我通过将 next-auth 库升级到版本 4.18.5 来修复它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM