typescript - Credentials Provider-sessie geeft altijd null terug met create-t3-stack (NextJS, NextAuth)
Dus ik probeer de loginpagina te laten werken met e-mail en wachtwoord uit de database en wanneer ik op verzenden klik, is de sessie altijd null. Dit is wat ik doe:
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'
// },
Dus op mijn aanmeldpagina roep ik de signIn-methode aan:
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;
}
resultaat retourneert: fout: nul ok: waar status: 200 url: "http://localhost:3000/"
Bij getServerSideProps heb ik geprobeerd het op twee verschillende manieren aan te roepen:
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 } };
};
Ik heb wat onderzoek gedaan, maar geen van deze benaderingen werkte voor mij. Als iemand een soortgelijk probleem heeft gehad, zou ik zeer dankbaar zijn aangezien ik hier sinds gisteren mee bezig ben 😦