在我的 Laravel 应用程序中,一开始我决定创建我自己的自定义登录控制器,而不是使用基础控制器。
public function postSignin(Request $request, AppMailer $mailer) {
$this->validate($request, [
'email' => 'required',
'password' => 'required',
]);
if (!Auth::attempt($request->only(['email', 'password']), $request->has('remember'))) {
return redirect()->back()->with('info', 'Could not sign you in with those details.');
}
if (Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password'), 'verified' => 0]))
{
$mailer->sendEmailConfirmationTo(Auth::user());
Auth::logout();
return redirect()->back()->with('info', 'Email verification required.');
}
Auth::user()->last_login = new DateTime();
Auth::user()->save();
return redirect()->back()->with('info', 'You are now signed in.');
}
现在我想编辑它,以便用户也可以使用他们的用户名登录,而不仅仅是他们的电子邮件,使用相同的字段。但是,尝试方法令人困惑。即使在我切换值之后,它似乎也希望收到一封电子邮件。
在这种情况下,Auth 文档也不是很有帮助。它要求我添加以下内容:
public function username()
{
return 'username';
}
在登录控制器中,但显然这是默认设置。
您可以使用“ FILTER_VALIDATE_EMAIL ”检查器。
$username = $request->get('username');
$password = $request->get('password');
$remember_me = $request->get('remember_me','1');
$field = filter_var($username,FILTER_VALIDATE_EMAIL)? 'email': 'username';
if(Auth::attempt([$field => $username,'password' => $password],$remember_me)){
//Auth successful here
}
含义FILTER_VALIDATE_EMAIL会检查字符串是否为电子邮件格式。
我希望此示例代码对您有所帮助。
-ken
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句