Laravel passport如何注销用户?

Laravel passport how to logout user?

我有一个主项目和一个客户项目。客户端项目通过 laravel passport.Login 使用主项目的授权工作正常,但是当我尝试使用 $request->user()->token()->revoke(); 注销时,客户端项目将用户重定向回主项目以获得授权,但出于某种原因,主项目没有要求登录,而是简单地发出一个新令牌并将用户重定向回客户端项目。我认为问题是我的登录路由和 returns SPA 应用程序的路由放置在网络中,而所有其他路由都放置在 api 中,但我不知道如何解决这个问题。另外,我在网络中使用 \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class(据我所知,允许我不在每个请求中发送不记名令牌)。我应该怎么做才能使注销正常工作?

我的登录和申请路线(放在网页上)

Route::get('/authorization{any}', 'SpaController@auth')->where('any', '^.*$');
Route::get('/{any}', 'SpaController@main')->where('any', '^(?!api)(?!logout)(?!storage).*$')->middleware('auth');
Route::get('logout', 'AuthController@logout')->middleware('auth');
Route::post('login', 'AuthController@login');

授权控制器

public function login(Login $request)
{
    if (config('recaptcha.enabled') && !$this->checkRecaptcha($request['recaptchaToken'], $request->ip())) {
         return 'Captcha error';
    }
    $credentials = request(['email', 'password']);
    if(!Auth::attempt($credentials))
        return response()->json([
            'message' => 'Unauthorized'
        ], 401);
    $user = $request->user();
    $tokenResult = $user->createToken('Personal Access Token');
    $token = $tokenResult->token;
    if ($request->remember_me)
        $token->expires_at = Carbon::now()->addWeeks(1);
    $token->save();
    return (['redirect' => redirect()->intended('/')->getTargetUrl()]);
}

注销路由(放在api)

Route::middleware(['auth:api','request.log'])->get('/logout', function (Request $request) {
    $request->user()->token()->revoke();
});

嗯!我不确定你在做什么,但希望它能对你有所帮助

如果 mainclient 都有单个 oauth_access_token 并且 mainclient 表是分开的那么你可以这样做这个简单:

Table 结构:

oauth_access_tokens

id             | user_id                      | name
// token        // id from main and client     // use this like boolean 0=> main 1=>client

通过这个你可以很容易地分离 mainclient 标记

像这样制作注销功能=>

How to logout JWT token using Multi authentication with different table of User

如果需要任何修改,请告诉我!