設定 nextauth v4 時遇到一些問題。收到此錯誤:
客戶端獲取錯誤,JSON 輸入意外結束 {錯誤:{…},路徑:“會話”,訊息:“JSON.parse:JSON 資料的第 1 行第 1 列的資料意外結束”}。
.env要修復它,他們說您必須在部署時將url 路徑添加到檔案中。我在 localhost 上作業,所以這應該不是問題,但是添加它之后,仍然是同樣的錯誤。
當我注釋掉[...nextauth]檔案中的異步會話回呼時,不會彈出錯誤并且會話已“經過身份驗證”但不會持續存在。我已經盯著它看了很長一段時間了,可以使用一些幫助!
[...nextauth].js
import NextAuth from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export default NextAuth({
providers: [
CredentialsProvider({
async authorize(credentials, res) {
//find existing user
const user = await prisma.user.findUnique({
where: {
email: credentials.email,
},
});
if (
credentials.email === user.email &&
credentials.password === user.password
) {
return user;
} else {
return res.status(409).send({ message: "No user with that email." });
}
},
}),
],
callbacks: {
async jwt({ token, user }) {
if (user) {
token.id = user.id;
return token;
}
},
//commenting this function and no error shows up
async session({ session, token }) {
if (token) {
session.id = token.id;
return session;
}
},
},
secret: "mysecret",
jwt: {
secret: "mysecret",
encryption: true,
},
session: {
strategy: "jwt",
maxAge: 1 * 24 * 60 * 60,
},
});
auth-form
import { signIn, useSession } from "next-auth/react";
export default function AuthForm() {
const { data: session } = useSession();
const handleSubmit = async (userData) => {
const { error, ok, url } = await signIn("credentials", {
redirect: false,
email: userData.email,
password: userData.password,
callbackUrl: "/profiel",
});
if (ok) {
router.push(url);
} else {
alert(error);
}
};
return (
<Form onSubmit={handleSubmit}>
<Field id="email" />
<Field id="password" />
<button type="submit">{isRegistered ? "Sign in" : "Register"}</button>
</Form>
);
}
_app.js
import { SessionProvider } from "next-auth/react";
function MyApp({ Component, pageProps: { session, ...pageProps } }) {
return (
<SessionProvider session={session}>
<Component {...pageProps} />
</SessionProvider>
);
}
uj5u.com熱心網友回復:
和回呼需要分別回傳一個session和物件。您需要在 if 塊之后移動每個函式中的 return 陳述句。jwtsessionjwt
callbacks: {
async jwt({ token, user }) {
if (user) {
token.id = user.id;
}
return token;
},
async session({ session, token }) {
if (token) {
session.id = token.id;
}
return session;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/430399.html
標籤:javascript 验证 下一个.js jwt 下一个认证
上一篇:VueJSaws-sdk訪問經過身份驗證的Cognito用戶的專用S3存盤桶
下一篇:Azure門戶中的神秘用戶?
