typescript - create-t3-stack(NextJS、NextAuth)でCredentials Providerのセッションが常にnullを返す
なので、データベースのメールとパスワードでログインページを動作させようとしているのですが、値を送信するといつもセッションがnullになります。私がやっていることは次の通りです:
CredentialsProvider({
name: "Credentials",
credentials: {},
async authorize(credentials: any) {
//check user
const user: any = await prisma.user.findUnique({
where: {
email: credentials.email,
},
});
if (!user) {
throw new Error("No user found");
}
console.log("user credentials", user);
const checkPassword = await compare(
credentials.password,
user?.password
);
console.log("user?.password", user?.password);
if (!checkPassword || user.email !== credentials.email) {
throw new Error("Password or Email dont match");
}
return user;
},
}),
],
// Include user.id on session
callbacks: {
session({ session, user }) {
if (session.user) {
session.user.id = user.id;
}
return session;
},
},
session: {
strategy: "jwt",
},
},
jwt: {
secret: "test",
},
secret: "test",
// pages: {
// signIn: "/",
// newUser: "/signin",
// signOut: "/signout",
// error: '/error'
// },
なので、私のサインインページで signIn メソッドを呼び出します:
async function onSubmitLoginValues(values: LoginValuesProps): Promise<any> {
const result = await signIn("credentials", {
email: values?.email,
password: values?.password,
redirect: false,
callbackUrl: "/",
});
console.log("result", result);
if (result?.ok) router.push("/");
return result;
}
結果が返されます: エラー: null OK: true ステータス: 200 URL: "http://localhost:3000/"
getServerSideProps で、私はそれを二つの異なる方法で呼び出そうとしました:
export const getServerSideProps = async (ctx: GetServerSidePropsContext) => {
const session = await getServerAuthSession(ctx);
if (!session) {
return {
redirect: { destination: "/signin", permanent: false },
};
}
return {
props: {
session,
},
};
//OR
console.log("ctx", ctx);
const response = await fetch("http://localhost:3000/api/auth", {
method: "GET",
credentials: "include",
//@ts-ignore
headers: {
Cookie: ctx.req.headers.cookie,
},
});
console.log("RESPOSNDE", response.json());
if (!response) {
return {
redirect: { destination: "/signin", permanent: false },
};
}
const data = await response.json();
return { props: { data } };
};
いくつか調べてみましたが、どの方法も私にはうまくいきませんでした。同じような問題に直面したことがある方がいれば、とても感謝します。昨日からデバッグしているのです 😦