validate([ 'email' => ['required', 'email'], 'password' => ['required', 'string'], 'device_name' => ['nullable', 'string'], ]); if (! Auth::attempt(['email' => $credentials['email'], 'password' => $credentials['password']])) { throw ValidationException::withMessages([ 'email' => ['The provided credentials are incorrect.'], ]); } /** @var User $user */ $user = User::query()->where('email', $credentials['email'])->firstOrFail(); $token = $user->createToken($credentials['device_name'] ?? 'api')->plainTextToken; return response()->json([ 'user' => new UserResource($user), 'token' => $token, ]); } public function logout(Request $request) { $request->user()->currentAccessToken()->delete(); return response()->json(status: 204); } }