Laravel 5.4 Api 路线 401

utd*_*dev 4 php api laravel laravel-5.3 laravel-5.4

我构建了一个新的 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');
    }
});
Run Code Online (Sandbox Code Playgroud)

我的 Api 路由如下所示:

Route::group(['middleware' => 'auth:api'], function()
{
    Route::post('postStream', ['as' => 'image', 'uses' => 'ApiController@postStream']);
});
Run Code Online (Sandbox Code Playgroud)

还有我的控制器:

public function postStream(Request $request)
{
    $imgData = $request->imgData;
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

POST http://localhost/app/public/api/postStream 401 (Unauthorized)
Run Code Online (Sandbox Code Playgroud)

在网络工具中:

{error: "Unauthenticated."}
error
:
"Unauthenticated."
Run Code Online (Sandbox Code Playgroud)

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

Edd*_*ove 5

它不起作用,因为您的路线受 保护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',
    ...
});
Run Code Online (Sandbox Code Playgroud)

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

如果您要寻找最便宜的解决方案,可以关注此帖子:https : //gistlog.co/JacobBennett/090369fbab0b31130b51