2015-06-07 278 views
1

在Laravel 5中,您如何定製默認身份驗證?例如,我有多種類型的用戶進行身份驗證。每種類型的用戶都是由一個角色定義的,例如求職者,招聘人員等。每種類型的用戶都有不同類型的註冊表格來捕獲一些配置文件的細節。所以我有以下表格:Laravel 5自定義身份驗證

users 
roles 
role_user 
jobseeker_profile 
recruiter_profile 

Laravel 5中的默認authcontroller和passwordcontroller使用所有身份驗證方法的特徵。你將如何去定製它 - 你們編輯現有的特徵文件?例如,getRegister方法返回寄存器視圖,但我希望它在決定顯示哪個視圖之前檢查路由。

// default method 
public function getRegister() 
{ 
    return view('auth.register'); 
} 

// custom method 
public function getRegister() 
{ 
    if (Request::is('jobseeker/register')) 
    { 
    return view('auth.jobseeker_register'); 
    } 
    elseif (Request::is('recruiter/register')) 
    { 
    return view('auth.recruiter_register'); 
    } 

} 

同樣默認postLogin方法如下:

public function postLogin(Request $request) 
{ 
    $this->validate($request, [ 
     'email' => 'required|email', 'password' => 'required', 
    ]); 

    $credentials = $request->only('email', 'password'); 

    if ($this->auth->attempt($credentials, $request->has('remember'))) 
    { 
     return redirect()->intended($this->redirectPath()); 
    } 

    return redirect($this->loginPath()) 
       ->withInput($request->only('email', 'remember')) 
       ->withErrors([ 
        'email' => 'These credentials do not match our records.', 
       ]); 
} 

但我想的方法還要檢查用戶角色如下:

public function postLogin(Request $request) 
{ 
    $this->validate($request, [ 
     'email' => 'required|email', 'password' => 'required', 
    ]); 

    $credentials = $request->only('email', 'password'); 

    if ($this->auth->attempt($credentials, $request->has('remember'))) 
    { 
     if(Auth::user()->role->name == 'recruiter') 
     { 
      return redirect()->to('/recruiter/dashboard'); 
     } 
     elseif(Auth::user()->role->name == 'jobseeker') 
     { 
      return redirect()->to('jobseeker/dashboard'); 
     } 

    } 

    return redirect($this->loginPath()) 
       ->withInput($request->only('email', 'remember')) 
       ->withErrors([ 
        'email' => 'These credentials do not match our records.', 
       ]); 
} 

所以我的問題是如何你去定製現有的身份驗證?你們是否會創建一個新的控制器,或許是CustomAuthController,CustomPasswordController,並將所有特徵從默認的身份驗證控制器複製到這些自定義控制器中並根據需要進行編輯?我無法找到有關如何實現這一目標的Laravel 5教程 - 它們都只是談論默認的開箱即用身份驗證。如果任何人做過類似的事情,我很想聽聽你是如何處理它的,以及哪些文件被編輯來連接這個自定義身份驗證。

回答

0

你有兩個選擇:

  1. 覆蓋在現有的身份驗證控制器的方法。
  2. 根本不執行AuthenticatesAndRegistersUsers特徵,並且完全自己實現驗證邏輯。

至於重定向,我會聽的auth.login事件,請檢查您的用戶的類型出現,然後重定向到特定的儀表盤那裏,然後。

+0

感謝您的建議。關於重定向,你如何在auth.login事件中聽取 - 抱歉,我是laravel的新手,一些示例代碼會很有用。另外,如果我自己實現身份驗證邏輯,我是否也必須調整'passwordController','Authenticate'和'RedirectIfAuthenticated'中間件? – adam78