#Hola! Necesito su ayuda con auth.js, que
1 messages · Page 1 of 1 (latest)
La autentificación de google funciona a la perfección sin problemas, pero la de Credentials, por alguna razón no se me génera la sessión, debugge esto haciendo console.log, y en efecto no se ejecuta el callback de la session, solo el del JWT. Alguien le ha pasado esto?
muestra tu auth.config.ts
yo tengo estos callbacks:
callbacks: {
async jwt({ token, user }: { token: JWT; user: User }) {
if (user) {
token.user = user;
}
return token;
},
async session({ session, token }) {
const res = await fetch(${process.env.BACKEND_URL}/api/auth/me, {
method: "GET",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
Authorization: "Bearer " + token.user.accessToken,
},
cache: "no-store",
});
if (!res.ok) {
throw new Error("Failed to fetch user");
}
session.profile = await res.json();
session.accessToken = token.user.accessToken;
return session;
},
porque necesito que se actualice el perfil
ahora lo he simplificado:
import NextAuth, { type DefaultSession, type User } from "next-auth";
import { JWT } from "next-auth/jwt";
import Credentials from "next-auth/providers/credentials";
import { z } from "zod";
import { authConfig } from "@/auth.config";
import { API_ROUTES, ROLE } from "./constants";
declare module "next-auth" {
interface Session {
accessToken: string;
user: DefaultSession["user"];
}
interface User {
accessToken: string;
}
}
declare module "next-auth/jwt" {
interface JWT {
user: User;
}
}
async function getUser(
email: string,
password: string
): Promise<User | undefined> {
try {
const res = await fetch(
`${process.env.BACKEND_URL}/${API_ROUTES.SIGN_IN}`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ email, password, role: ROLE.EMPLOYER }),
}
);
if (!res.ok) {
return undefined;
}
return res.json();
} catch (error) {
throw new Error("Failed to fetch user.");
}
}
export const { auth, signIn, signOut } = NextAuth({
...authConfig,
providers: [
Credentials({
async authorize(credentials) {
const parsedCredentials = z
.object({ email: z.string().email(), password: z.string() })
.safeParse(credentials);
if (parsedCredentials.success) {
const { email, password } = parsedCredentials.data;
const user = await getUser(email, password);
if (user) {
return user;
}
return null;
}
return null;
},
}),
],
callbacks: {
async jwt({ token, user }: { token: JWT; user: User }) {
if (user) {
token.user = user;
token.accessToken = user.accessToken;
}
return token;
},
async session({ session, token }) {
session.accessToken = token.user.accessToken;
return session;
},
},
});
@near light Gracias por hecharme la mano jajaja. Hay problema si te hablo por privado,?el midubot no me deja poner el mensaje porque dice que segun ando haciendo spam 😅