对不起,我是API新手
我有一个laravel项目,我想创建API将我的laravel数据库连接到移动应用程序,所以我尝试在我的作曲家上使用jwt
"tymon/jwt-auth": "0.5.*"
之后我添加了我的路线这段代码
Route::group(['prefix' => 'api'], function() {
Route::post('login', 'Api\AuthController@login');
Route::group(['middleware' => ['jwt.auth', 'jwt.refresh']], function() {
Route::post('logout', 'Api\AuthController@logout');
Route::get('test', function(){
return response()->json(['foo'=>'bar']);
});
});
});
这是我在控制器上的登录功能
public function login(Request $request) {
$credentials = $request->only('email', 'password');
try {
// attempt to verify the credentials and create a token for the user
if (! $token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'invalid_credentials'], 401);
}
} catch (JWTException $e) {
// something went wrong whilst attempting to encode the token
return response()->json(['error' => 'could_not_create_token'], 500);
}
// all good so return the token
return response()->json(compact('token'));
}
之后我使用POSTMAN检查我的API的响应,我插入url localhost:8000 / api / login
但我收到了令牌错误
TokenMismatchException in VerifyCsrfToken.php line 53
我该怎么办?我必须在哪里创建令牌?
答案 0 :(得分:4)
你正在获得JWT代币和CSRF代币混淆。这个问题与JWT无关,尽管有“令牌”一词。
Laravel默认情况下会requires a _token
value与POST
个请求一起传递以阻止CSRF attacks。
您可以将此功能包含在您的请求中,也可以通过修改App\Http\Middleware\VerifyCsrfToken
的{{1}}值来为您的API停用CSRF保护。