Laravel 6使用Passport访问auth:api保护路由报401 Unauthorized错误怎么解决
问题排查与解决方案
1. 补全Axios请求的认证配置
你当前的Axios请求未携带Passport要求的认证凭证,这是401错误最常见的原因,分两种场景处理:
- 如果是令牌认证模式(前后端分离/跨域场景):
登录接口获取到访问令牌后,给Axios设置全局认证头:// 登录成功获取token后执行一次即可 axios.defaults.headers.common['Authorization'] = `Bearer ${你的访问令牌变量}`; - 如果是同域Cookie认证模式(前端和Laravel服务同域名):
首先在app/Http/Kernel.php的web中间件组中加入Passport的Cookie加密中间件:
再给Axios开启跨域凭证携带配置:\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,axios.defaults.withCredentials = true;
2. 修正Passport路由配置
你之前给Passport::routes()加auth:api中间件的操作是错误的,Passport自带的oauth路由(含令牌下发接口)本身是给未认证用户调用的,加认证中间件会导致根本拿不到有效令牌,直接改回默认配置即可:
// AuthServiceProvider中只保留这行即可,不需要额外加前缀和中间件 Passport::routes();
3. 确认配置生效
执行以下命令清理所有缓存,避免修改的auth.php等配置未生效:
php artisan cache:clear php artisan config:clear
4. 校验令牌有效性
如果配置完上述步骤仍报错,可直接查询数据库oauth_access_tokens表,确认你使用的令牌revoked字段为0(未被撤销)、expires_at字段值晚于当前时间(未过期)。
内容的提问来源于stack exchange,提问作者Blues Clues
相关产品推荐
相关产品推荐

