【发布时间】:2020-09-03 06:48:53
【问题描述】:
我有一个主要和客户项目。客户端项目通过 laravel 护照使用主项目的授权。登录工作正常,但是当我尝试使用$request->user()->token()->revoke(); 注销时,客户端项目将用户重定向回主项目进行授权,但由于某种原因,而不是询问对于登录,主项目只需发出一个新令牌并将用户重定向回客户端项目。我认为问题在于我的登录路由和返回 SPA 应用程序的路由都放在 web 中,而所有其他路由都放在 api 中,但我不知道如何解决这个问题。另外,我在 web 中使用 \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();
});
【问题讨论】:
-
您是否尝试过使用连接Auth Facade的注销方式?在我的控制器中,它看起来像这样... auth()->logout();
-
@JohnSims 如果我使用 auth()->logout() 我收到错误 Method Illuminate\Auth\RequestGuard::logout 不存在
-
Route::get('/logout', '\App\Http\Controllers\Auth\LoginController@logout')->name('logout');试试这个
-
@TimeParadox 我尝试安装 laravel 基本授权,但是当我这样做时 auth::attempt 开始总是返回 false
-
您的
oauth_access_token表对于主客户端和客户端都相同吗?
标签: php laravel laravel-passport