400, 'msg' => '账号和密码不能为空']); } try { // 查询管理员 $admin = Administrator::where('account', $account)->find(); // 验证账号是否存在及密码是否正确 if (empty($admin) || md5($password) != $admin['password']) { return errorJson('账号或密码错误',400); } // 验证账号状态 if ($admin['status'] != 1) { return errorJson('账号已被禁用',400); } // 更新登录信息 $admin->lastLoginIp = Request::ip(); $admin->lastLoginTime = time(); $admin->save(); // 构建用户数据 $userData = [ 'id' => $admin['id'], 'account' => $admin['account'], 'name' => $admin['name'], 'type' => 'admin' // 标记用户类型为管理员 ]; // 生成JWT令牌 $token = JwtUtil::createToken($userData, self::TOKEN_EXPIRE); $expireTime = time() + self::TOKEN_EXPIRE; // 缓存用户信息,方便后续验证 Session::set('admin_auth', [ 'id' => $admin['id'], 'account' => $admin['account'], 'name' => $admin['name'], 'token' => $token ]); // 返回登录成功数据 return successJson([ 'id' => $admin['id'], 'account' => $admin['account'], 'name' => $admin['name'], 'token' => $token, 'token_expired' => $expireTime, 'lastLoginTime' => date('Y-m-d H:i:s', $admin['lastLoginTime']) ]); } catch (\Exception $e) { return errorJson('登录失败:' . $e->getMessage(),500); } } /** * 刷新令牌 * @return \think\response\Json */ public function refreshToken() { // 获取Session中保存的管理员信息 $adminAuth = Session::get('admin_auth'); if (empty($adminAuth)) { return errorJson('未登录或登录已过期',401); } try { // 查询管理员信息 $admin = Administrator::where('id', $adminAuth['id'])->find(); if (empty($admin)) { Session::delete('admin_auth'); return errorJson('管理员不存在',401); } // 构建用户数据 $userData = [ 'id' => $admin['id'], 'account' => $admin['account'], 'name' => $admin['name'], 'type' => 'admin' // 标记用户类型为管理员 ]; // 生成新令牌 $token = JwtUtil::createToken($userData, self::TOKEN_EXPIRE); $expireTime = time() + self::TOKEN_EXPIRE; // 更新Session中的令牌 $adminAuth['token'] = $token; return successJson([ 'token' => $token, 'token_expired' => $expireTime ]); } catch (\Exception $e) { return errorJson('刷新令牌失败:' . $e->getMessage(),500); } } /** * 退出登录 * @return \think\response\Json */ public function logout() { Session::delete('admin_auth'); return successJson('退出成功'); } /** * 获取当前登录管理员信息 * @return \think\response\Json */ public function getInfo() { // 获取Session中保存的管理员信息 $adminAuth = Session::get('admin_auth'); if (empty($adminAuth)) { return errorJson('未登录或登录已过期',401); } // 查询管理员信息 $admin = Administrator::where('id', $adminAuth['id'])->find(); if (empty($admin)) { Session::delete('admin_auth'); return errorJson('管理员不存在',401); } return successJson([ 'id' => $admin['id'], 'account' => $admin['account'], 'name' => $admin['name'], 'lastLoginTime' => date('Y-m-d H:i:s', $admin['lastLoginTime']), 'lastLoginIp' => $admin['lastLoginIp'] ]); } }