Laravel护照"auth:api"中间件充当"web, auth"中间件



我已经为Laravel 5.3设置了Laravel Passport软件包,就像官方文档(https://laravel.com/docs/5.3/passport#introduction(中所述一样。

我希望 API 由移动应用程序使用,因此我正在尝试实现密码授予令牌。我已经创建了一个密码授予客户端,令牌请求过程...

$response = $http->post('http://my-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'username' => 'my@email.com',
        'password' => 'my-password',
        'scope' => '',
    ],
]);

。只是按预期工作,为我的一个用户返回访问令牌和刷新令牌

一方面,

php artisan route:list

列出 api/用户 URI 的正确中间件:api,auth:api

并且 api guard 的驱动程序在配置/身份验证.php中正确设置为护照。总而言之,安装过程的每一步都已完成(https://laravel.com/docs/5.3/passport#installation(。

API 的默认内容.php:

Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware('auth:api');

当我访问 http://my-app.com/api/user 时出现问题,因为它似乎正在使用"web"中间件而不是"api"对请求进行身份验证......当我访问时,如果用户未登录,我会被重定向到/login(登录表单(,如果是......

任何帮助将不胜感激。提前谢谢。

解决了!仅供记录,解决方案:

我向 http://my-app.com/api/user 发送的请求与HTTP标头错误。我正在发送:

Type: Authorization - Content: Bearer: $accessToken 

。正确的方法是:

Type: Authorization - Content: Bearer $accessToken (without colon)

我从没想过这可能是一个错字...无论如何,错误不容易检测到,因为重定向到登录表单从一开始就误导了我。我相信这确实是一种奇怪的行为......

正确的解决方案是从此文件中删除redirectTo()app/http/middleware/Authenticate.php中对中间件进行身份验证

相关内容

最新更新