typescript - Por que a sessão está nula quando faço login com sucesso no Nextjs?
Estou usando Nextjs 14, NextAuth ^4.24.7 e Strapi v4. Tento fazer login com e-mail e senha; embora eu faça login com sucesso e tenha o token e os dados do usuário, a sessão retorna nula. Por favor, dê uma olhada no meu código e me ajude a resolver meu problema. Obrigado antecipadamente.
Este é o app/api/auth/[...nextauth]/route.ts"
import { options} from "@/app/services/auth";
import NextAuth from "next-auth";
// import the authOptions you have created inside the auth.js file
const handler = NextAuth(options);
export { handler as GET, handler as POST };
Este é o auth.tsx:
import CredentialsProvider from "next-
auth/providers/credentials";
import axios from "axios";
export const options = {
providers: [
CredentialsProvider({
name: "Credentials",
credentials: {
username: {
label: "Username:",
type: "text",
placeholder: "Username",
},
password: {
label: "Password:",
type: "password",
placeholder: "Enter your password",
},
},
authorize: async (credentials) => {
return axios.post(`${process.env.NEXT_PUBLIC_API_URL}/api/auth/local`,
{
identifier: credentials?.username,
password: credentials?.password,
})
.then(async (e) => {
const { jwt, user } = e.data;
if (jwt) {
const roles = await axios
.get(
`${process.env.NEXT_PUBLIC_API_URL}/api/users/me?populate=role`,
{
headers: { Authorization: `Bearer ${jwt}` },
}
)
.then(({ data }) => {
return data;
})
.catch((e) => {
console.log("catch", e);
return [];
});
return {
...user,
name: user.first_name + ' ' + user.last_name,
jwt,
roles,
id: user.id,
};
}
})
.catch((e) => {
return null;
});
},
}),
],
pages: {
signIn: "/signin",
},
callbacks: {
jwt: ({ token, user }:{token:any,user:any}) => {
console.log(user,'..................')
if (token) {
token.id = token.id;
token.roles = token.roles;
token.jwt = token.jwt;
}
return token;
},
session: ({ session, token }:{session:any,token:any}) => {
session.user.id = token.id;
session.user.roles = token.roles;
session.user.jwt = token.jwt;
return session;
},
},
};
Esta é a função submit no meu formulário Login.tsx. Eu console.log(session, ".................") aqui, e ela retorna nulo.
const onSubmit: SubmitHandler<IFormValues> = async (data) => {
const signedIn = await signIn("credentials", {
username: data?.userName,
password: data?.password,
redirect: false,
callbackUrl,
});
// here the session is null
console.log(signedIn, session, "................");
if (!signedIn?.error) {
router.push("/profile");
return;
}
};