在所有 Laravel api 请求中获取 401

Posted

技术标签:

【中文标题】在所有 Laravel api 请求中获取 401【英文标题】:Getting 401 in all Laravel api requests 【发布时间】:2018-01-05 18:58:54 【问题描述】:

我正在使用 Laravel 和 Passport 来通过 OAuth 保护我的 API。 虽然,在使用 PostMan 工具获得的授权令牌后,在我使用 Passport 中间件的所有请求中,我得到了 401。 我安装了 Laravel 两次并在互联网上四处寻找都没有成功,然后按照这个页面进行安装:click here。 有一些我的代码:

我尝试访问的路线:

Route::group(['middleware' => 'auth:api'], function()

    Route::get('/user', function (Request $request) 
        return $request->user();
    );

);

授权守卫:

'guards' => [
    //..

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

更新 1:请求标头

Accept: application/json
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImU5ZDcwZGY0ZjA2MGZhNDk5MzQ1ZjQyN2QxMWY1MDhkZDI2ZWQxODkzZDgxMTcxYWNkZGYxYTkxYzkwNWYxOGUyMTI2NzY0M2QwZmQyOWRiIn0.eyJhdWQiOiIxIiwianRpIjoiZTlkNzBkZjRmMDYwZmE0OTkzNDVmNDI3ZDExZjUwOGRkMjZlZDE4OTNkODExNzFhY2RkZjFhOTFjOTA1ZjE4ZTIxMjY3NjQzZDBmZDI5ZGIiLCJpYXQiOjE1MDE1Mjc2NDYsIm5iZiI6MTUwMTUyNzY0NiwiZXhwIjoxNTMzMDYzNjQ2LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.dbJ4jddUZx1BT9X81LQIY-Dcx6xdDtmm2nH_C6t7rgFYzRTjab6w7T1NXfzKNlAeyi4iWJAARSBDI32vCeGuAy1ukFvr0qkoEp8UIZEqeeQYYam1Oox_0fuLlJyzwkOiospEc53KZBB0AQrPpW12abxZiZ6asQ9S4AbEJa5N95QFaYRMlxPxEMQOFt28v5148-shawcmtdV-AuAOpvsmap5_f4vQ-NY9R_He0NS4zOOQEY7sPIaRrsQ_XEAJwyiGnrUyufLr02T8wDUcqTskxCtizZx0aHN8i8lz9_X7xBFMHLj4zI4R3wfuZTWlOww07HdBt1oX8PAWvTgA0lw4Sq_xeKa3-MfuCasC4Vh_KWuvHQAfTIuCQw4lPOELfWWaeJTaEuuos7YFbOdoZIHoQWVs4lcisKpHuTGd8bzIPY9GGYsG26LRZB62vX358bijUuurh8p3ajPOt45tmvJnYyaHdf1gW5YwEqbtb07bohMrLFCNhYT0JFZvKa54FRRbB6BLA4lToDA4j1secMKan8mRMLwjEhqyPD0qxBswiMc127ryQ4CLvtKZ75Weno3oAnZ29ZkgtJCTESMzFjd41K-KgrV-s9KTWvfvmOECQUTQz6xUZ5WyVLzPZdBi6wNRYdAp4xRTA1RNUH3TSAP9qYt-xWTwNANXLvL5gBkBjQM

PS:token 是 Vue 组件生成的 Personal Access Token。

【问题讨论】:

你是如何传递访问令牌的?能否提供邮递员请求的截图? 检查更新 1 @Sandeesh 【参考方案1】:

当使用邮递员时,您是否像这样在标题中强制使用 Content-Type

Content-Type: application/json 

【讨论】:

是的,我正在使用该标头提出请求。当然,还有授权。 您的授权标头值格式是什么?它应该Bearer <token>【参考方案2】:

尝试以这种方式更新您的路线文件:

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

详细了解路由here。

【讨论】:

谢谢,但没有奏效。我正在尝试解决这个问题,但仍然没有修复。 我正在获取令牌并在标头中使用,但它不起作用。【参考方案3】:

在 Laravel 5.6 及更高版本中,cookie 没有序列化/反序列化。但是,Passport 仍然希望 cookie 被序列化。

要解决此问题,您只需将Passport::withoutCookieSerialization(); 添加到app\Providers\AuthServiceProvider::boot()

【讨论】:

以上是关于在所有 Laravel api 请求中获取 401的主要内容,如果未能解决你的问题,请参考以下文章

在Laravel护照,vueJS和Axios中未经授权获得401

使用 laravel Sanctum 和 api 令牌身份验证获取用户时出现 401(未经授权)[重复]

Laravel 获取请求头

youtube api的401方法获取问题

使用 Passport 进行 Laravel API 身份验证导致 401(未经授权)

Laravel 5.4 Api 路线 401