我是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(),
]);
}
任何建议,建议,线索,想法,有助于调整上述代码,以便我可以使用用户名或电子邮件和密码登录?
答案 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'))) {
// ...
}