validate([ 'first_name' => ['required', 'string', 'max:255'], 'last_name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'], 'phone' => ['required', 'string', 'max:25'], 'password' => ['required', 'string', 'min:8', 'confirmed'], 'username' => ['required', 'string', 'max:32', 'unique:users,username'] ]); $user = User::create([ 'username' => $validated['username'], 'first_name' => $validated['first_name'], 'last_name' => $validated['last_name'], 'email' => strtolower($validated['email']), 'phone' => $validated['phone'], 'password' => Hash::make($validated['password']), ]); Auth::login($user); $request->session()->regenerate(); return response()->json([ 'message' => 'User registered successfully.', 'user' => $request->user(), ], 201); } public function login(Request $request): JsonResponse { $validated = $request->validate([ 'email' => ['required', 'string', 'email'], 'password' => ['required', 'string'], ]); $credentials = [ 'email' => strtolower($validated['email']), 'password' => $validated['password'], ]; if (! Auth::attempt($credentials, $request->boolean('remember'))) { throw ValidationException::withMessages([ 'email' => ['Los datos no coinciden con nuestros registros.'], ]); } $request->session()->regenerate(); return response()->json([ 'message' => 'Login successful.', 'user' => $request->user(), ]); } public function logout(Request $request): JsonResponse { Auth::guard('web')->logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return response()->json([ 'message' => 'Logout successful.', ]); } }