Laravel 5.4 Api 路线 401

Posted

技术标签:

【中文标题】Laravel 5.4 Api 路线 401【英文标题】:Laravel 5.4 Api Route 401 【发布时间】:2017-09-03 00:12:34 【问题描述】:

我构建了一个新的 laravel 5.4 项目。

我尝试在我的 api 路由中执行以下步骤,但不知何故它们不起作用。

在我的 app.js 文件中,我有这个 ajax 调用:

$.ajaxSetup(
    headers: 
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
    
);
$.ajax(
    url: 'api/postStream',
    type: 'post',
    data:  imgData: imgData ,
    success:function(data) 
        console.log('success');
    
);

我的 Api 路由如下所示:

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

    Route::post('postStream', ['as' => 'image', 'uses' => 'ApiController@postStream']);
);

还有我的控制器:

public function postStream(Request $request)

    $imgData = $request->imgData;
    ...

但我在我的 chrome 开发控制台中收到此错误:

POST http://localhost/app/public/api/postStream 401 (Unauthorized)

在网络工具中:

error: "Unauthenticated."
error
:
"Unauthenticated."

我想我有点没有经过身份验证,但我不知道如何以这种方式实现。

【问题讨论】:

这对您有帮助吗? laracasts.com/discuss/channels/laravel/… 你确定你到达了正确的端点吗?我的猜测是http请求应该去localhost/api/postStream。 如果您使用['middleware' => 'auth:api'],则需要传递访问令牌。遵循创建 API、保护 API 和请求 API 密钥的步骤。首先,您需要获取访问密钥并通过 ajax 调用传递它。我正在使用 Passport 为我的 API 提供身份验证。 laravel.com/docs/5.4/passport @webDev 嗯好的,你知道一个教程可以进一步解释这个吗?这个:laravel.com/docs/5.4/passport ? 【参考方案1】:

它不起作用,因为您的路由受auth:api 保护,它返回401 unauthorized。通过auth:api 的唯一方法是在每个请求中发送您的身份验证令牌

var token = <?php json_encode(Auth::user()->api_token); ?>; //if you are using api_token

$.ajax(
    url: 'api/postStream',
    headers: 
        'Authorization':'Bearer ' + token,
    ,
    type: 'post',
    ...
);

获得令牌的方式完全取决于您。您可以使用 Passport 或只是将 api_token 添加到您的用户表的最简单的解决方案。

如果你想要最便宜的解决方案,你可以关注这个帖子:https://gistlog.co/JacobBennett/090369fbab0b31130b51

【讨论】:

您好,我离开了几天,无法回复您,所以我按照kopy.io/WIZp1 构建了 ajax 标头必须看起来如何?我没有得到Bearer 的东西 您需要一个 api 令牌来“承担”授权。我给了你一个链接,看看如何将 api_token 添加到你的用户。因为你需要它来进行身份验证。

以上是关于Laravel 5.4 Api 路线 401的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 护照 oauth 路线总是返回 401 未经授权

Laravel 护照公共 api 路线

在Laravel的宁静路线5.4

在 laravel 5.4 中为某些路由禁用 csrf 令牌?不工作[重复]

Laravel 5.4:API 路由列表

在所有 Laravel api 请求中获取 401