使用电子邮件或用户名登录

时间:2015-05-09 06:52:47

标签: php laravel laravel-5

我是Laravel 5的新手,我使用其内置的登录功能,是的,我可以使用电子邮件和密码登录,一切正常。现在,我创建了一个名为username的新列,并在`users表(包含登录内容的表)中填入了我想要的用户名。如何使用电子邮件或用户名和密码登录?

我是从 AuthenticatesAndRegistersUsers.php 找到的:

/**
 * Handle a login request to the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
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' => $this->getFailedLoginMessage(),
                ]);
}

任何建议,建议,线索,想法,有助于调整上述代码,以便我可以使用用户名或电子邮件和密码登录?

1 个答案:

答案 0 :(得分:1)

documentation表示可以使用自定义列。因此,如果您想使用用户名进行身份验证,可以使用以下命令:

this->auth->attempt(['username' => 'the_username', 'password' => 'the_password', 
$request->has('remember'));

如果第一个失败,那么你需要再次调用Auth ::的尝试。

你也可以采用回答a similar question的方法(感谢拉斐尔的出色解决方案:

$usernameinput = $request->input('email');
$field = filter_var($usernameinput, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';

if (Auth::attempt(array($field => $usernameinput, 'password' => $password),
    $request->has('remember'))) {
    // ...
}
相关问题