Laravel 5.4:无法让Auth :: guard按预期工作

时间:2017-04-27 18:02:19

标签: php laravel-5.4

我正在使用Auth::guard来检查注销控制器中正在使用哪个防护。如果是管理员守卫,那么我希望重定向到管理员登录,否则它将转到用户登录。

我的期望是Auth::guard('admin')检查后卫是否确实属于admin类型。如果是这样,它将使用if语句进行。

但是,它没有像我期望的那样工作。我用dd(Auth::guard())来检查我的后卫,它绝对是web后卫。但无论如何,Auth::guard('admin')仍在让它通过。

我做错了什么?我的假设是Auth::guard错了吗?非常感谢!

if (Auth::guard('admin') ) {

        $this->guard()->logout();

        $request->session()->flush();

        $request->session()->regenerate();  

        return redirect('admin-login');
    }
    else {

        $this->guard()->logout();

        $request->session()->flush();

        $request->session()->regenerate();  
        return redirect('/login');
    }

1 个答案:

答案 0 :(得分:0)

当您使用Auth::guard('admin')时,它会抓取该守卫(如果存在)它不会检查当前是否正在使用该守卫。由于那个守卫确实存在if (Auth::guard('admin') )总是如此。

要检查当前是否正在使用该防护,您可以执行if(Auth::getDefaultDriver() === 'admin')。当您使用auth:admin中间件时,它会将admin设置为默认防护,因此您可以对此进行检查。

更干嘛的方法是:

    $this->guard()->logout();

    $request->session()->flush();

    $request->session()->regenerate();  

    return redirect(Auth::getDefaultDriver() === 'admin' ? '/admin-login' : '/login')