responseService = $responseService; } /** * 用户登录 * @param Request $request * @return JsonResponse * @throws ValidationException|CustomException */ public function login(Request $request) { try { $validator = Validator::make($request->all(), [ 'email' => 'required|email', 'password' => 'required|string', ], [ 'email.required' => '邮箱不能为空', 'email.email' => '邮箱格式不正确', 'password.required' => '密码不能为空', ]); if ($validator->fails()) { throw new ValidationException($validator); } $user = User::where('email', $request->email)->first(); if (!$user || !Hash::check($request->password, $user->password)) { throw new CustomException('邮箱或密码错误', 401); } if ($user->status !== 1) { throw new CustomException('账号已被禁用', 403); } // 删除旧token $user->tokens()->delete(); // 创建新token $token = $user->createToken('auth-token')->plainTextToken; //$this->logService->log('login', $user->name . '登录系统'); return $this->responseService->success([ 'user' => [ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, 'avatar' => $user->avatar, 'is_admin' => $user->is_admin, ], 'token' => $token, ]); } catch (ValidationException|CustomException $e) { throw $e; } catch (\Exception $e) { return $this->responseService->systemError('登录失败:' . $e->getMessage()); } } /** * 退出登录 * * @param Request $request * @return JsonResponse */ public function logout(Request $request) { try { $user = Auth::guard('sanctum')->user(); if ($user) { // 删除所有token $user->tokens()->delete(); //$this->logService->log('logout', $user->name . '退出系统'); } return $this->responseService->success(null, '退出成功'); } catch (\Exception $e) { return $this->responseService->systemError('退出失败:' . $e->getMessage()); } } /** * 获取当前登录用户信息 * @return JsonResponse * @throws CustomException */ public function me() { try { $user = Auth::user(); if (!$user) { throw new CustomException('未登录', 401); } // 查询用户角色和权限 $roles = $user->roles()->pluck('name')->toArray(); $permissions = $user->getAllPermissions()->pluck('name')->toArray(); return $this->responseService->success([ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, 'phone' => $user->phone, 'avatar' => $user->avatar, 'is_admin' => $user->is_admin, 'roles' => $roles, 'permissions' => $permissions, ]); } catch (CustomException $e) { throw $e; } catch (\Exception $e) { return $this->responseService->systemError('获取用户信息失败:' . $e->getMessage()); } } }