【发布时间】:2020-01-08 20:19:22
【问题描述】:
我使用 Laravel Passport 构建 API,我相应地删除了网络路由及其保护
如何测试用户注销?
这是我目前所拥有的:
Logout Test
/**
* Assert users can logout
*
* @return void
*/
public function test_logout()
{
// $data->token_type = "Bearer"
// $data->access_token = "Long string that is a valid token stripped out for brevety"
$response = $this->json('POST', '/api/logout', [], [
'Authorization' => $data->token_type . ' ' . $data->access_token
]);
$response->assertStatus(200);
}
routes/api.php
Route::post('logout', 'Auth\LoginController@logout')->name('logout');
控制器方法使用 AuthenticatesUsers 特征,因此保留默认功能
/**
* Log the user out of the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->invalidate();
return $this->loggedOut($request) ?: redirect('/');
}
错误方法 Illuminate\Auth\RequestGuard::logout 不存在
Laravel Documentation 谈到了颁发和刷新访问令牌,但没有谈到撤销它们或执行注销
注意:我正在使用密码授权令牌
注意 2:撤销用户的令牌不起作用
public function logout(Request $request)
{
$request->user()->token()->revoke();
return $this->loggedOut($request);
}
Test Fails on second assertion
public function test_logout()
{
$response = $this->json('POST', '/api/logout', [], [
'Authorization' => $data->token_type . ' ' . $data->access_token
]);
$response->assertStatus(200); // Passes
$check_request = $this->get('/api/user');
$check_request->assertForbidden(); // Fails
}
给定需要身份验证的默认路由
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
响应状态码 [200] 不是禁止状态码。
那么发生了什么?以及如何使用 Passport 测试用户注销?
提前致谢
【问题讨论】:
标签: laravel oauth-2.0 phpunit laravel-passport