validate([ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users,email', 'password' => 'required|string|min:8|confirmed', ]); $userRole = Role::where('name', 'user')->firstOrFail(); $user = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => $data['password'], 'role_id' => $userRole->id, ]); $token = $user->createToken('api')->plainTextToken; return response()->json([ 'token' => $token, 'user' => $user->load('role'), ], 201); } public function login(Request $request): JsonResponse { $data = $request->validate([ 'email' => 'required|email', 'password' => 'required|string', ]); $user = User::where('email', $data['email'])->first(); if (! $user || ! Hash::check($data['password'], $user->password)) { throw ValidationException::withMessages([ 'email' => ['The provided credentials are incorrect.'], ]); } $token = $user->createToken('api')->plainTextToken; return response()->json([ 'token' => $token, 'user' => $user->load('role'), ]); } public function logout(Request $request): JsonResponse { $request->user()->currentAccessToken()->delete(); return response()->json(['message' => 'Logged out.']); } public function me(Request $request): JsonResponse { return response()->json($request->user()->load('role')); } }