Laravel:如何重定向到页面取决于角色

时间:2017-10-28 10:41:36

标签: php laravel

我有两种类型的登录,Admin和Customer。 如果想通过admin credintals登录客户仪表板,它会赢得登录,这就是我想要的,但是如果我使用客户信用卡登录会将我重定向到客户仪表板,但如果我想在同一时间打开管理仪表板,它将重定向在没有检查角色ID的情况下,我没有检查管理仪表板,该代码必须是1而不是2,如下代码所示:

管理员:信息中心\ LoginController

public function postLogin(request $request){
    $auth=auth::guard('web')->attempt(['email'=>$request->email,'password'=>$request->password,'active'=>1,'role_id'=>1]);
    if($auth)
    {
        return redirect()->route('dashboard');
    }
    return view('Dashboard.login');
}


public function getLogin(){
    if(Auth::guard('web')->check()){
        return redirect()->route('dashboard');
    }
    return view('Dashboard.login');
}

客户:customer \ LoginController

public function postLogin(request $request){
    $auth=auth::guard('web')->attempt(['email'=>$request->email,'password'=>$request->password,'active'=>1,'role_id'=>2]);
    if($auth)
    {
        return redirect()->route('customer');
    }
    return redirect()->route('/');
}

public function getLogin(){
    if(Auth::guard('web')->check()){
        return redirect()->route('customer');
    }
    return view('index.mainpage.home');
}

2 个答案:

答案 0 :(得分:0)

在我看来,只有在完成身份验证后才应该处理,然后应用决定根据用户的角色将用户重定向到正确的路由:)

这只是一次检查,不是每次请求检查>>这是中间件的工作。

AuthenticatesUsersauthenticated特征中有一个名为protected function authenticated(Request $request, $user)的方法,其LoginController签名可以在/** * The user has been authenticated. * * @param \Illuminate\Http\Request $request * @param mixed $user * @return mixed */ protected function authenticated(Request $request, $user) { if ($user->hasRole('admin')) { return redirect('/admin'); } else { return redirect('/'); } } 内覆盖它。您可以检查用户的角色,然后将其重定向到正确的位置。

举个例子:

/admin

<强>更新

我们有两种情况(据我所知):

场景1 :用户(有任何类型)登录该站点,我们想将他重定向到相应的面板(例如,如果他有管理员角色,那么将他重定向到管理面板)。

场景2 :如果普通用户转到403 Forbidden,我们希望阻止他访问管理面板并重定向回主页或面临composer require squizlabs/php_codesniffer --dev 错误页。

在第一个场景中,您可以通过检查用户的角色来重定向用户(我已在上面解释过)。

在第二种情况下,您需要一个管理路由组的中间件来检查用户的角色,如果它不是管理员用户,那么重定向或中止它。

答案 1 :(得分:0)

刚刚添加

的AdminController中的

$这 - &GT;中间件( 'AUTH:管理员');