我正在尝试使用最新版本的 Auth 创建一个身份验证应用程序,但是在凭据中,所有逻辑从数据库获取用户后,当它将返回到 Session 时,我尝试强制数据查看是否有效,但是没有。
import bcrypt from "bcryptjs"
import type { NextAuthConfig } from "next-auth"
import Credentials from "next-auth/providers/credentials"
import { LoginSchema } from "@/utils/schemas/index"
import getUserByEmail, { } from "@/database/getUserByEmail"
export default {
providers: [
Credentials({
async authorize(credentials): Promise<any> {
const validatedFields = LoginSchema.safeParse(credentials)
if (validatedFields.success) {
const { email, password } = validatedFields.data
const user = await getUserByEmail(email)
if (!user || !user.Senha) return null
const passwordsMatch = await bcrypt.compare(
password,
user.Senha,
)
if (passwordsMatch) {
console.log(typeof user) // is a valid object
return user
}
}
return null
}
})
],
} satisfies NextAuthConfig
我的 auth.ts 在这里:
import NextAuth from "next-auth"
import authConfig from "./auth.config"
import { db } from "@/database/db"
import { PrismaAdapter } from "@auth/prisma-adapter"
export const {
handlers: { GET, POST },
auth,
signIn,
signOut,
} = NextAuth({
adapter: PrismaAdapter(db),
session: { strategy: "jwt" },
...authConfig,
})
console.log(typeof user)
不是一个好的调试方法,因为 console.log(tyepof null)
是 "object"
。尝试运行此代码:
console.log(typeof null)
尝试记录
user
对象本身并查看真实值:
console.log(user)
您有一些返回的情况
null
:
validatedFields.success === false
!user
!user.Senha
!passwordsMatch
尝试一一调试:
export default {
providers: [
Credentials({
async authorize(credentials): Promise<any> {
const validatedFields = LoginSchema.safeParse(credentials)
if (validatedFields.success) {
const { email, password } = validatedFields.data
const user = await getUserByEmail(email)
console.log({user, userSenha: user.Senha})
if (!user || !user.Senha) return null
const passwordsMatch = await bcrypt.compare(
password,
user.Senha,
)
if (passwordsMatch) {
console.log(user)
return user
} else {
console.log("Password didn't match")
return null
}
} else {
console.log("Credentials are not valid")
return null
}
// You can get rid of this return
return null
}
})
],
} satisfies NextAuthConfig
这样你就可以知道bug到底在哪里
此外,您可以启用
NextAuth.debug
配置来获取有关应用程序中身份验证状态的更详细信息
export const {
handlers: { GET, POST },
auth,
signIn,
signOut,
} = NextAuth({
debug: proccess.env.NODE_ENV === "development", // enable in dev - disable in production
adapter: PrismaAdapter(db),
session: { strategy: "jwt" },
...authConfig,
})