validate([ 'name' => 'required|string|max:60', 'email' => 'required|email|max:120|unique:users', 'password' => 'required|string|min:8|max:120', ]); $user = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); $token = $user->createToken('web')->plainTextToken; return response()->json(['user' => $user, 'token' => $token], 201); } public function login(Request $r): JsonResponse { $data = $r->validate([ 'email' => 'required|email', 'password' => 'required|string', ]); $user = User::where('email', $data['email'])->first(); if (! $user || ! Hash::check($data['password'], $user->password)) { return response()->json(['message' => 'Credenciales inválidas'], 401); } $token = $user->createToken('web')->plainTextToken; return response()->json(['user' => $user, 'token' => $token]); } public function logout(Request $r): JsonResponse { $r->user()->currentAccessToken()->delete(); return response()->json(['ok' => true]); } public function me(Request $r): JsonResponse { return response()->json($r->user()); } }