实现思路:
1、POST提交登录数据(用户名和密码)
2、获取POST请求的数据,根据用户名来验证账号是否存在。
3、校对状态码和校对密码
4、更新数据库
5、将从数据库获取的用户信息保存到Session中
6、跳转到首页,完成登录。
实现代码:
1、登录表单代码
<form class="form form-horizontal" action="{:url('login/check')}" method="post"> <div class="row cl"> <label class="form-label col-xs-3"><i class="Hui-iconfont"></i></label> <div class="formControls col-xs-8"> <input id="" name="username" type="text" placeholder="用户名" AUTOCOMPLETE="OFF" class="input-text size-L"> </div> </div> <div class="row cl"> <label class="form-label col-xs-3"><i class="Hui-iconfont"></i></label> <div class="formControls col-xs-8"> <input id="" name="password" type="password" placeholder="密码" AUTOCOMPLETE="OFF" class="input-text size-L"> </div> </div> <div class="row cl"> <div class="formControls col-xs-8 col-xs-offset-3"> <input class="input-text size-L" type="text" placeholder="验证码" name="code" value="" style="width:150px;"> <img src="/captcha" alt="点击更新验证码" onclick="reloadcode(this)"/> </div> </div> <div class="row cl"> <div class="formControls col-xs-8 col-xs-offset-3"> </div> </div> <div class="row cl"> <div class="formControls col-xs-8 col-xs-offset-3"> <input name="" type="submit" class="btn btn-success radius size-L" value=" 登 录 "> <input name="" type="reset" class="btn btn-default radius size-L" value=" 取 消 "> </div> </div> </form>
2、获取登录信息
通过用户名查询相关数据、验证状态码、验证密码是否正确,更新数据库信息、保存用户数据到Session中。
public function check(){ // 判断是否是POST请求 if($this->request->isPost()){ //1、获取post的请求数据 $data = \input('post.'); // var_dump($data); // 验证码验证 /* if(!captcha_check($data['code'])){ $this->error('验证码不正确!'); } */ try { // 2、通过username来查询用户数据 $user = model('AdminUser')->get(['username'=>$data['username']]); } catch (\Exception $th) { $this->error($e->getMessage()); } //2、校对状态码,判断用户是否存在,不存在,则返回登录页面 if(!$user || $user->status != config('code.status_normal')){ $this->error('用户不存在'); } //3、校验密码,判断密码是否正确,不正确则返回登录页面 if($user->password != \md5($data['password'].'_#sing_ty')){ $this->error('密码错误'); } //4、更新数据库: 登录时间 登录IP等数据 这个部分主要是跟数据表有关系,有些账号需要更新登录时间、登录ip等字段 //5、将数据保存到Session,以后用户的是否登录,就看session中是否有用户数据 \session(config('admin.session_user'),$user,config('admin.session_user_scope')); //6、登录成功就跳转到首页 $this->success('登录成功!','index/index'); }else{ $this->error('请求不合法'); } }
3、实现退出登录功能
退出登录功能,实质就是清除浏览器的Session中的用户数据。
public function logout(){ // 清除Session中的用户数据 \session(null,\config('admin.session_user_scope')); // 跳转到登录页 $this->redirect('login/index'); }
以上就是用户登录的基本步骤,在实际的开发中,可能用户字段会比现在的更复杂,正这个例子中没有实现验证码功能,实际开发中肯定会有验证码功能,也肯定会有在登录成功之后更新数据表信息的功能。