Laravel 5自定义身份验证

时间:2015-06-07 14:12:12

标签: authentication laravel-5 customization

在Laravel 5中,如何自定义开箱即用的默认身份验证?例如,我有多种类型的用户可以进行身份​​验证。每种类型的用户都由角色定义,即Jobseeker,Recruiter等。每种类型的用户都将使用不同类型的注册表单来捕获一些配置文件详细信息。所以我有以下表格:

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,并将默认auth控制器中的所有特征复制到这些自定义控制器中并根据需要进行编辑?我无法找到任何关于如何实现这一目标的Laravel 5教程 - 他们都只是谈论默认的开箱即用身份验证。如果有人做过类似的事情之前我很想知道你是怎么做的,那么编辑了哪些文件来连接这个自定义身份验证。

1 个答案:

答案 0 :(得分:0)

您有几个选择:

  1. 覆盖现有auth控制器中的方法。
  2. 根本不要实现AuthenticatesAndRegistersUsers特征,并完全自己实现认证逻辑。
  3. 关于重定向,我会听取auth.login事件,检查用户的类型,然后重定向到那里的特定信息中心。