我用passport和laravel 8構建的api默認不注銷。
我找到了一個腳本,但它沒有洗掉 oauth-access-tokens 表中的條目
我向 AuthController 添加了一個函式:
public function logout(Request $request){
$accessToken = auth()->user()->token();
$token= $request->user()->tokens->find($accessToken);
$token->revoke();
return response(['message'=> 'Je bent uitgelogd'], 200);
}
并在 api.php 中添加了一個路徑:
Route::post( 'logout', 'App\Http\Controllers\API\AuthController@logout')->middleware('auth:api');
當我嘗試使用 Postman 注銷時,我收到一條成功訊息,但未洗掉 oauth-access-token 表中的條目。
我打算洗掉用戶的所有令牌,以從所有設備上注銷
誰能告訴我我做錯了什么?
uj5u.com熱心網友回復:
將注銷功能更改為:
public function logout(Request $request){
$user = Auth::user()->token();
$user->revoke();
return response(['message'=> 'Je bent uitgelogd'], 200);
}
這將使用戶從他請求注銷的當前設備注銷。如果您想從他登錄的所有設備中注銷,請執行以下操作:
use Laravel\Passport\RefreshToken;
use Laravel\Passport\Token;
public function logout(Request $request){
$tokens = $user->tokens->pluck('id');
Token::whereIn('id', $tokens)->update(['revoked', true]);
RefreshToken::whereIn('access_token_id', $tokens)->update(['revoked' => true]);
}
這將撤銷發給該用戶的所有訪問和重繪 令牌。
uj5u.com熱心網友回復:
解決了:
我使用了以下代碼:
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
和功能:
public function logout(Request $request){
Auth::user()->tokens->each(function($token, $key) {
$token->delete();
});
return response(['message'=> 'Je bent uitgelogd'], 200);
}
所以沒有任何東西被撤銷,但所有的令牌都被洗掉了..
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/321706.html
