使用您自己的API - 未经授权

时间:2018-01-17 14:43:34

标签: laravel laravel-5 laravel-5.5

我已经完成了一些谷歌搜索并检查this answer但是当我从非登录用户的laravel应用程序中使用我自己的api时仍然面临401 Unauthorized响应。

我已经按照官方文档安装了护照。

我也在每个axios请求上都有这个:

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

let token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

令牌也在我的样板上定义:

<meta name="csrf-token" content="{{ csrf_token() }}">

为什么请求仍然未经授权?

2 个答案:

答案 0 :(得分:1)

如果您的api路由包装在auth:api中间件中,关键字为auth,那么除非您没有首先登录用户,否则您将无法做任何事情。

您可以删除身份验证,仅拥有api中间件,但这不能保护此终结点计算机免受跨站点/未经授权的请求。

一种解决方案可能是创建一个client credentials grant token并将其发送到前端,尽管您必须将其存储在某个地方。

我个人是因为它是您自己的api,所以我只是在其自己的文件中创建一个路由或路由组,然后将此文件require分别放入您的webapi路由文件中。因此,您可以使用csrf保护功能从自己的Web应用程序中使用它;如果您尝试在其他地方访问它,则它需要在URL api中加前缀https://website.com/api和访问令牌。 / p>

答案 1 :(得分:0)

那么,对于不需要经过身份验证的用户的路由,不要使用“ auth:api”,为什么呢?,您是否注意到关键字“ AUTH ===”已在“ auth:api”中间件上进行了身份验证?经过身份验证的用户,或者甚至在进行api检查之前先进行身份验证。

那该怎么办?

如果您碰巧使每个请求都应在Http / Kernel.php文件下的“ auth:api”中间件检查下,如下所示

'api' => [
        'throttle:60,1',
        'bindings',
        'auth:api'
    ],

只需将其删除,然后将此中间件添加到仅需要经过身份验证的用户的路由的routes / api.php文件上,如下所示

  Route::post('/comments', CommentsController@post')->middleware('auth:api');

然后让不需要经过身份验证的用户的路由变为这样

  Route::get('/comments', 'CommentsController@index);