我使用的是Next.js 14.0.3和Auth.js 5.0.0-beta.4。
我正在尝试使用Auth.js凭据提供程序。类似于下一个教程所做的here。
但是,当尝试使用无效凭据登录时,我会在服务器控制台上抛出错误。
问题是,signIn
方法是用try/catch
Package 的,所以它不应该像这样抛出。x1c 0d1x
这是我的actions.ts
文件。
"use server";
import { signIn } from "@/auth";
import { AuthError } from "next-auth";
export async function authenticate(
prevState: string | undefined,
formData: FormData
) {
try {
await signIn("credentials", formData);
} catch (error) {
if (error instanceof AuthError) {
switch (error.type) {
case "CredentialsSignin":
return "Invalid credentials.";
default:
return "Something went wrong.";
}
}
throw error;
}
}
字符串
下面是我的auth.ts
文件:
export const { auth, signIn, signOut } = NextAuth({
...authConfig,
providers: [
Credentials({
async authorize(credentials) {
const validatedCredentials = CredentialsSchema.safeParse(credentials);
if (validatedCredentials.success) {
const { username, password } = validatedCredentials.data;
const { user } = await findUserByUsername(username);
if (!user) {
return null;
}
const passwordMatch = await bcrypt.compare(password, user.password);
if (passwordMatch) {
return user;
}
}
console.log("Invalid credentials.");
return null;
},
}),
],
});
型
我看到auth.ts
文件中也记录了Invalid credentials.
,所以我100%确定我的authorize
方法返回null。
1条答案
按热度按时间lxkprmvk1#
我也遇到了同样的问题。在我的例子中,我需要在auth.ts和actions.ts的顶部添加“use server”来解决这个问题。