时间:2021-07-01 10:21:17 帮助过:5人阅读
Laravel的Auth默认是以邮箱来登录的,怎样改成用户名OR邮箱登录?
多次登录错误显示验证码又怎样实现?(这是YII2的方式)
登录时能以用户名或邮箱登录,当用户名/邮箱或密码错误3次之后要求输入验证码,怎么实现?
重写postLogin登录函数:
/**
* Handle a login request to the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function postLogin(Request $request)
{
//获取表单的值
$username = $request->input('username');
$password = $request->input('password');
$remeber = $request->input('remember');
//判断是邮箱还是用户名登录
$type = filter_var($username, FILTER_VALIDATE_EMAIL ) ? 'email' : 'username';
//登录表单验证
$validator = Validator::make($request->all(), [
'username' => 'bail|required|min:5|max:30',
'password' => 'bail|required|min:8|max:50',
]);
//表单验证失败提示
if ($validator->fails()) {
$errors = $validator->errors()->all();
if (count($errors) > 0) {
Flash::error(implode('
', $errors));
}
return redirect('/login')
->withInput();
}
//登录验证
if ($type == 'email') {
if (Auth::attempt(['email' => $username, 'password' => $password], $request->has('remember'))) {
Flash('登录成功');
return redirect()->intended($this->redirectPath());
}
} else if (Auth::attempt(['username' => $username, 'password' => $password], $request->has('remember'))) {
Flash('登录成功');
return redirect()->intended($this->redirectPath());
} else {
Flash(Lang::get('auth.failed'), 'error');
return redirect('/login')
->withInput();
}
}
问题未完全解决,所以先挂着。
客户端登陆之后 点击次数参数 提交到服务器,不成功并且响应带下次登入次数的值给客服端,服务端记录session。以此类推达到3次 客服端直接异步请求 拉取验证码,之后再填写登陆 。带上登陆次数参数 , 服务器进行判断次数,如果没有达到3次 不需要进行验证码判断 反之。