diff --git a/backend/app/controller/AuthController.php b/backend/app/controller/AuthController.php index c5d3dca..86b94a6 100644 --- a/backend/app/controller/AuthController.php +++ b/backend/app/controller/AuthController.php @@ -216,9 +216,9 @@ class AuthController extends BaseController /** * 飞书扫码登录回调(飞书授权后的回调) */ - public function qrcodeLoginCallback(Request $request): Response + public function qrcodeLoginCallback(Request $request, $id = null): Response { - $sessionId = $this->getRouteParam($request, 'id'); + $sessionId = $id; $authCode = $request->get('auth_code'); if (!$sessionId) { diff --git a/backend/config/route.php b/backend/config/route.php index d0f017e..eba94e5 100644 --- a/backend/config/route.php +++ b/backend/config/route.php @@ -12,9 +12,11 @@ Route::group('/api/v1', function () { Route::post('/auth/feishu-login', [app\controller\AuthController::class, 'feishuLogin']); Route::post('/auth/qrcode-login', [app\controller\AuthController::class, 'qrcodeLogin']); Route::get('/auth/qrcode-login/status', [app\controller\AuthController::class, 'qrcodeLoginStatus']); - Route::get('/login/qrcode/{id}', [app\controller\AuthController::class, 'qrcodeLoginCallback']); })->middleware($apiMiddleware); +// 飞书登录回调(不在 /api/v1 下,供飞书重定向使用) +Route::get('/login/qrcode/{id}', [app\controller\AuthController::class, 'qrcodeLoginCallback'])->middleware($apiMiddleware); + // 用户路由(需要认证) Route::group('/api/v1/user', function () { Route::get('/info', [app\controller\UserController::class, 'info']); diff --git a/nginx/x-server-api.conf b/nginx/x-server-api.conf index 27fc8e6..315ada3 100644 --- a/nginx/x-server-api.conf +++ b/nginx/x-server-api.conf @@ -28,6 +28,22 @@ server { proxy_read_timeout 60s; } + # 飞书登录回调代理 + location /login/qrcode/ { + proxy_pass http://127.0.0.1:8787/login/qrcode/; + proxy_http_version 1.1; + + # 传递真实IP + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # 超时设置 + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + } + # 健康检查端点 location /health { access_log off;