Laravel - 如何获得认证用户的警卫?

时间:2017-03-15 12:10:26

标签: laravel

我有一个带有两个函数的自定义LoginController:

  

运行Auth :: guard('customer')的loginCustomer - >尝试(...);

     

运行Auth :: guard('employee')的loginEmployee - >尝试(...);

我在config.auth中定制了两个警卫,指向我的两个模型(客户和员工)并保护后台和前端的路由。

现在在我的自定义LogoutController中,我想运行Auth :: logout(),但它不起作用,因为我认为它使用默认的守卫。

只有在我指定 if ($form->isValid()) { // ... do something // the save_and_add button was clicked if ($form->get('approve')->isClicked()) { // probably redirect to the add page again } if ($form->get('reject')->isClicked()) { // probably redirect to the add page again } // redirect to the show page for the just submitted item } Auth::guard('customer')->logout()时才会有效,具体取决于用于登录的后卫。

有没有办法让警卫用来验证用户,所以我只能使用Auth::guard('employee')->logout()

2 个答案:

答案 0 :(得分:6)

这可能不是完美的解决方案,但它确实有效。基本上,只需检查所有警卫并检查用户是否通过该警卫进行身份验证。如果他是 - 记录他。请注意,这将使他退出他登录的所有警卫。

此代码将转到您的注销控制器:

  $guards = array_keys(config('auth.guards'));
  foreach ($guards as $guard) {
    if(Auth::guard($guard)->check()) Auth::guard($guard)->logout();
  }

答案 1 :(得分:5)

您可以使用shouldUse方法:

调用此方法后,您可以通过shouldUse方法之前设置的后卫来注销用户。

在你的情况下:

if( Auth::guard('customer')->attempt(...) ){
    Auth::shouldUse('customer');
}


if( Auth::guard('employee')->attempt(...) ){
    Auth::shouldUse('employee');
}

在此之后你可以使用Auth :: logout并使用之前选择的后卫(通过shouldUse):

// just use Auth::logout without Auth::guard(GUARDNAME)->logout()
Auth::logout();

有关此方法的简短文档:https://laravel.com/api/5.4/Illuminate/Auth/AuthManager.html#method_shouldUse