refactor: 重构飞书授权代码,提取公共工具类
1. 创建 app/util/HttpClient.php - 公共 HTTP 请求类 - httpGet() 和 httpPost() 方法 - 支持自定义 headers 和 timeout - 统一错误处理和日志 2. 创建 app/util/FeishuUtil.php - 飞书授权工具类,可被其他业务模块复用 - getAppAccessToken() - 获取应用访问令牌(带缓存) - getUserAccessToken() - 获取用户访问令牌 - getUserInfo() - 获取用户信息 - getCompleteUserInfo() - 一步获取完整用户信息 - clearTokenCache() - 清除 token 缓存 3. 重构 app/service/FeishuService.php - 使用新的工具类 - 移除重复的 HTTP 请求方法 - 保持向后兼容 飞书授权流程: 1. app_access_token (应用级令牌) 2. user_access_token (用户级令牌,需要 app_access_token) 3. 用户信息 (需要 user_access_token) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -142,7 +142,8 @@ class AuthController extends BaseController
|
||||
|
||||
// 构建扫码登录 URL(使用官方 passport 端点)
|
||||
$appId = 'cli_a8033d607cba500d';
|
||||
$redirectUri = urlencode("https://xsm.dev.hnxinyouhe.com/login/qrcode/{$loginSession->id}");
|
||||
// 使用固定的 redirect_uri,session_id 通过 state 传递
|
||||
$redirectUri = urlencode("https://xsm.dev.hnxinyouhe.com/login/callback");
|
||||
$authUrl = "https://passport.feishu.cn/suite/passport/oauth/authorize?client_id={$appId}&redirect_uri={$redirectUri}&response_type=code&state={$loginSession->id}";
|
||||
|
||||
// 生成二维码内容(返回 URL,前端生成二维码)
|
||||
@@ -216,10 +217,12 @@ class AuthController extends BaseController
|
||||
/**
|
||||
* 飞书扫码登录回调(飞书授权后的回调)
|
||||
*/
|
||||
public function qrcodeLoginCallback(Request $request, $id = null): Response
|
||||
public function qrcodeLoginCallback(Request $request): Response
|
||||
{
|
||||
$sessionId = $id;
|
||||
$authCode = $request->get('auth_code');
|
||||
// 从 state 参数获取 session_id
|
||||
$sessionId = $request->get('state');
|
||||
// OAuth 2.0 标准参数是 code
|
||||
$authCode = $request->get('code');
|
||||
|
||||
if (!$sessionId) {
|
||||
return $this->error('缺少会话ID');
|
||||
|
||||
Reference in New Issue
Block a user