@@ -17,95 +17,66 @@ const formSchema = z.object({
1717} ) ;
1818
1919export const signIn = async ( data : z . infer < typeof formSchema > ) => {
20- try {
21- console . log ( '[signIn] Iniciando proceso de autenticación' ) ;
22- console . log ( '[signIn] Email recibido:' , data . email ) ;
23- console . log ( '[signIn] RedirectTo:' , data . redirectTo ) ;
20+ // Variable para almacenar la URL de redirección después del try/catch
21+ let redirectUrl : string | null = null ;
2422
23+ try {
2524 // Validar datos
2625 const validatedData = formSchema . parse ( data ) ;
2726 const { email, password } = validatedData ;
2827
29- console . log ( '[signIn] Datos validados correctamente' ) ;
30-
3128 // Buscar usuario
32- console . log ( '[signIn] Buscando usuario en la base de datos...' ) ;
3329 const user = await prisma . user . findUnique ( {
3430 where : { email } ,
3531 } ) ;
3632
3733 if ( ! user ) {
38- console . log ( '[signIn] ERROR: Usuario no encontrado' ) ;
3934 throw new Error ( 'Credenciales incorrectas.' ) ;
4035 }
4136
42- console . log ( '[signIn] Usuario encontrado:' , user . id ) ;
43-
4437 // Verificar contraseña
45- console . log ( '[signIn] Verificando contraseña...' ) ;
4638 const isPasswordValid = await bcrypt . compare ( password , user . password ) ;
4739
4840 if ( ! isPasswordValid ) {
49- console . log ( '[signIn] ERROR: Contraseña incorrecta' ) ;
5041 throw new Error ( 'Credenciales incorrectas.' ) ;
5142 }
5243
53- console . log ( '[signIn] Contraseña válida' ) ;
54-
5544 // Verificar si el email está verificado
5645 if ( ! user . emailVerified ) {
57- console . log ( '[signIn] ERROR: Email no verificado' ) ;
5846 throw new Error ( `EMAIL_NOT_VERIFIED:${ email } ` ) ;
5947 }
6048
61- console . log ( '[signIn] Email verificado' ) ;
62-
6349 // Crear sesión
64- console . log ( '[signIn] Creando sesión...' ) ;
6550 const session = await prisma . session . create ( {
6651 data : {
6752 userId : user . id ,
6853 expires : new Date ( Date . now ( ) + 1000 * 60 * 60 * 24 * 7 ) ,
6954 } ,
7055 } ) ;
7156
72- console . log ( '[signIn] Sesión creada:' , session . id ) ;
73-
7457 // Establecer cookie
75- console . log ( '[signIn] Estableciendo cookie...' ) ;
76- try {
77- const cookieStore = cookies ( ) ;
78- cookieStore . set ( 'sessionId' , session . id , {
79- httpOnly : true ,
80- secure : process . env . NODE_ENV === 'production' ,
81- sameSite : 'lax' ,
82- path : '/' ,
83- maxAge : 60 * 60 * 24 * 365 ,
84- } ) ;
85- console . log ( '[signIn] Cookie establecida correctamente' ) ;
86- } catch ( cookieError ) {
87- console . error ( '[signIn] ERROR al establecer cookie:' , cookieError ) ;
88- throw new Error ( 'Error al establecer la sesión. Por favor, intenta nuevamente.' ) ;
89- }
90-
91- // Redirigir a la URL especificada o a home por defecto
92- const redirectTo = data . redirectTo || '/' ;
93- console . log ( '[signIn] Proceso completado exitosamente, redirigiendo a:' , redirectTo ) ;
58+ const cookieStore = cookies ( ) ;
59+ cookieStore . set ( 'sessionId' , session . id , {
60+ httpOnly : true ,
61+ secure : process . env . NODE_ENV === 'production' ,
62+ sameSite : 'lax' ,
63+ path : '/' ,
64+ maxAge : 60 * 60 * 24 * 365 ,
65+ } ) ;
9466
95- // redirect() lanza una excepción especial en Next.js que no debe ser capturada
96- // Esta es la forma correcta de redirigir desde un server action
97- redirect ( redirectTo ) ;
67+ // Guardar URL de redirección para usar fuera del try/catch
68+ redirectUrl = data . redirectTo || '/' ;
9869 } catch ( error ) {
99- console . error ( '[signIn] ERROR GENERAL:' , error ) ;
100- console . error (
101- '[signIn] Stack trace:' ,
102- error instanceof Error ? error . stack : 'No stack available' ,
103- ) ;
104-
10570 // Re-lanzar el error para que el cliente lo maneje
10671 if ( error instanceof Error ) {
10772 throw error ;
10873 }
10974 throw new Error ( 'Error desconocido al iniciar sesión' ) ;
11075 }
76+
77+ // redirect() DEBE estar fuera del try/catch
78+ // porque lanza una excepción especial (NEXT_REDIRECT) que Next.js intercepta
79+ if ( redirectUrl ) {
80+ redirect ( redirectUrl ) ;
81+ }
11182} ;
0 commit comments