#Hola! Necesito su ayuda con auth.js, que

1 messages · Page 1 of 1 (latest)

golden cape
#

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?

near light
#

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

near light
#

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;
    },
  },
});
golden cape
#

@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 😅