我建立了一个新的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 dev控制台出现了这个错误:
POST http://localhost/app/public/api/postStream 401 (Unauthorized)
在网络工具中:
{error: "Unauthenticated."}
error
:
"Unauthenticated."
我想我有点不认识,但我不知道如何以这种方式实现。
答案 0 :(得分:3)
它不起作用,因为您的路由受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添加到users表的最简单的解决方案。
如果您想找到最便宜的解决方案,可以关注此帖:https://gistlog.co/JacobBennett/090369fbab0b31130b51