[英]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 }
分别返回false
和sessionRequired
。 并触发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.