You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Passport部署到cPanel后带Token的API路由跳转至登录页问题

问题排查方案

针对你部署到cPanel后API路由认证失败跳转至登录路由的问题,可按以下步骤排查:

1. 修正API认证失败的响应逻辑

Laravel默认对非JSON请求的认证失败会跳转登录页,若你的API请求未被识别为JSON请求,就会触发跳转至api/user/login(该路由仅支持POST,GET访问自然报错)。

  • 检查app/Exceptions/Handler.php中的unauthenticated方法,确保API请求返回JSON而非跳转:
use Illuminate\Auth\AuthenticationException;

protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['message' => '未授权访问'], 401);
    }

    return redirect()->guest(route('login'));
}
  • 同时在Postman请求中添加Accept: application/json请求头,明确告知服务器这是API请求。

2. 确保Passport在服务器环境的配置完整

  • 执行php artisan passport:keys生成服务器专属的加密密钥(本地的keys文件不会自动同步到服务器,必须重新生成)。
  • 确认.env文件中APP_URL设置为服务器的完整域名(如https://your-domain.com),Passport生成的Token依赖该URL验证有效性。
  • 检查服务器数据库中oauth_clients、oauth_personal_access_clients表是否有有效数据,若为空则重新执行php artisan passport:install。

3. 验证权限Gate的执行结果

你的admin Gate依赖用户关联的role模型及title字段,需确认服务器数据库数据是否正确:

  • 执行php artisan tinker进入交互模式,输入以下命令验证:
$user = App\Models\User::find(你的用户ID);
dd($user->role, $user->can('admin'));

若返回false,说明用户的role关联不存在或title不是admin,需修正数据库数据。

4. 彻底清除路由缓存

执行以下命令确保路由缓存被完全清除:

php artisan route:clear
php artisan config:clear
php artisan cache:clear

注意:不要在生产环境执行php artisan route:cache,除非你确认所有路由都是静态定义的,否则会导致动态路由失效。

5. 检查请求头的正确性

  • 确认Authorization头格式为Bearer {你的Token},注意Bearer与Token之间必须有空格。
  • 若服务器启用HTTPS,需确保请求使用HTTPS协议,避免Token因协议不一致验证失败。

6. 单独测试中间件定位问题

暂时移除can:admin中间件,仅保留auth:api,测试API是否能正常访问:

Route::middleware(['auth:api'])->group(function () {
  Route::get('card/index',[CardController::class, 'index']);
});

若此时能正常访问,说明问题出在权限Gate的判断逻辑;若仍跳转登录,则问题集中在auth:api认证环节。


内容的提问来源于stack exchange,提问作者Jack The Baker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:25:56