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();
});
嗯!我不确定你在做什么,但希望它能对你有所帮助
如果 main
和 client
都有单个 oauth_access_token
并且 main
和 client
表是分开的那么你可以这样做这个简单:
Table 结构:
oauth_access_tokens
id | user_id | name
// token // id from main and client // use this like boolean 0=> main 1=>client
通过这个你可以很容易地分离 main
和 client
标记
像这样制作注销功能=>
How to logout JWT token using Multi authentication with different table of 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();
});
嗯!我不确定你在做什么,但希望它能对你有所帮助
如果 main
和 client
都有单个 oauth_access_token
并且 main
和 client
表是分开的那么你可以这样做这个简单:
Table 结构:
oauth_access_tokens
id | user_id | name
// token // id from main and client // use this like boolean 0=> main 1=>client
通过这个你可以很容易地分离 main
和 client
标记
像这样制作注销功能=>
How to logout JWT token using Multi authentication with different table of User
如果需要任何修改,请告诉我!