我使用凭据进行了NextAuth身份验证.当我使用登录页面时,它工作得很好.
const handleSubmit = async (event:FormEvent) => {
event.preventDefault();
await signIn("credentials", {
username: inputs.username,
password: inputs.password,
callbackUrl: '/home',
});
}
然后,我try 让用户在创建帐户后立即登录.
表单正在工作,并且帐户已在数据库中创建,但用户没有自动登录,并且我收到了凭据错误.
我猜在我的代码try 登录之前,新创建的帐户没有提交到数据库.
我为NextAuth SignIn功能添加了setTimeout
,它工作得很好.所以我的猜测应该是正确的,但使用setTimeout
似乎不是正确的方法.
我try 使用wait语法,以便在CreateUser()
完成后进行SignIn.它不起作用.我认为是这样的,但我显然误解了一些东西.
const submitUser = async (userData: FormData) => {
if (validatePass()) {
await CreateUser(userData)
signIn("credentials", {
username: userData.get("username"),
password: userData.get("password"),
callbackUrl: '/home',
});
}
}
export async function CreateUser(userData: FormData) {
bcrypt.hash(userData.get("password") as string, 12, async function(err, hash) {
try {
await query(
`INSERT INTO users(username, password) VALUES ($1, $2)`,
[userData.get("username"), hash]
)
} catch(error) {
return {
message: "Error in insert"
}
}
});
};