validated(); $user = User::create([ 'username' => $data['username'], 'email' => $data['email'], 'password' => $data['password'], ]); $token = $user->createToken( $this->resolveDeviceName($data) )->plainTextToken; return response()->json([ 'token' => $token, 'token_type' => 'Bearer', ], Response::HTTP_CREATED); } public function login(LoginRequest $request): JsonResponse { $data = $request->validated(); $user = User::where('email', $data['email'])->first(); if (! $user || ! Hash::check($data['password'], $user->password)) { throw ValidationException::withMessages([ 'email' => [__('auth.failed')], ]); } $token = $user->createToken( $this->resolveDeviceName($data) )->plainTextToken; return response()->json([ 'token' => $token, 'token_type' => 'Bearer', 'user' => $user, ]); } public function me(Request $request): JsonResponse { return response()->json($request->user()); } public function logout(Request $request): JsonResponse { $request->user()?->currentAccessToken()?->delete(); return response()->json([ 'message' => __('auth.logout_success'), ]); } /** * Determine the token name to use for the access token. * * @param array $data */ private function resolveDeviceName(array $data): string { $deviceName = trim((string) ($data['device_name'] ?? '')); return $deviceName !== '' ? $deviceName : 'api-token'; } }