2017-10-28 129 views
0

我有2种类型的登录名,Admin和Customer。 如果想用管理员信用登录到客户仪表板,它会赢得登录,这是我想要的,但是如果我使用客户信用登录会将我重定向到客户仪表板,但是如果我想在同一时间打开管理仪表板,重定向我到管理仪表盘,不检查它必须是1不是2本规范的角色ID:Laravel:如何重定向到页面取决于角色

管理:控制面板\的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'); 
} 

客户:客户\的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'); 
} 
+0

这属于中间件,而不是控制器。 –

+0

那么你能帮我修改吗? –

+0

@GhadahSalman:请按照此[链接](https://stackoverflow.com/questions/40048732/laravel-5-3-login-redirect-to-different-pages-for-multiple-users) –

回答

0

在我看来,应该验证已完成后才进行处理,然后应用程序决定将用户重定向根据其作用:)

这只是一个检查,而不是每个请求检查>>纠正路线这是中间件工作。

有一个名为authenticated这个protected function authenticated(Request $request, $user)签名,你可以重写它的LoginControllerAuthenticatesUsers性状内的方法。您可以检查用户的角色,然后将其重定向到正确的位置。

作为一个例子:

/** 
* 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('/'); 
    } 
} 

UPDATE

我们有两个场景(据我发现的):

方案1:用户(具有任何类型)的登录到该网站,我们希望将其重定向到相应的面板(例如,如果他有管理员角色,则将其重定向到管理员面板)。

方案2:如果普通用户去/admin我们要阻止他进入管理面板和重定向回主页或面对他403 Forbidden错误页面。

在第一种情况下,您可以通过检查其角色(我已经在上面解释过)从LoginController重定向用户。

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

+0

不明白我在新的laravel :( –

+0

@GhadahSalman您是否在App \ Http \ Controllers \ Auth中发现了'LoginController'? – YaserKH

+0

是的,它只有这个功能:protected $ redirectTo ='/ home'; /** * 创建一个新的控制器实例。 * * @返回空隙 */ 公共函数__construct() { $这 - >中间件( '客户',[ '除了' - > '注销']); } } –

0
在AdminController

刚刚添加

$这个 - >中间件( 'AUTH:管理员');

相关问题