我正在使用[Dingo/api][1]
laravel包来创建API。之前我和它一起工作过,我没有这个问题。
这是api.php
文件中的路线:
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', ['prefix' => 'v1', 'namespace' => 'App\Http\Controllers'], function ($api) {
$api->group(['prefix' => 'auth'], function ($api) {
$api->post('signIn', 'Auth\LoginController@signIn');
});
$api->group(['middleware' => 'api.auth'], function ($api) {
$api->get('signOut', ['uses' => 'Auth\LoginController@signOut']);
$api->get('test', function () {
return response()->json(['foo' => 'bar']);
});
});
});
/signIn
路由正常工作并响应可在其他受保护端点(如/test
和/test
目录中使用的令牌正常工作。
但我希望退出用户并致电/signOut
路由,并始终对此做出回应:
{
"success": false,
"message": "Unauthenticated.",
"status_code": 500
}
这是signOut
中的LoginController
方法:
public function signOut()
{
//return 'Hiiiii Alll';
try {
$token = \Tymon\JWTAuth\Facades\JWTAuth::getToken();
\Tymon\JWTAuth\Facades\JWTAuth::invalidate($token);
return [
'success' => true,
'message' => 'You Signed Out Successfully'
];
} catch (\Exception $e) {
return $this->response->error('Something went wrong', 404);
}
}
即使我从该方法返回一个Simple字符串它也没有运行,似乎问题出现在我使用的['middleware' => 'api.auth']
但是如果它是正确的,为什么test
目录中的问题没有出现在同一路线组?
更新(解决方案):
我发现应该在logout
方法的SignOut
方法中将__construct()
更改为LoginController
:
public function __construct()
{
$this->middleware('guest')->except('logout');
}