>前端html使用了vue.js
~~~html
<form id="login">
<fieldset>
<label data-tag="username" class="block clearfix">
<span class="block input-icon input-icon-right">
<input type="text" v-model="model.username" class="form-control" placeholder="用户名" />
<i class="icon-user"></i>
</span>
</label>
<label data-tag="password" class="block clearfix">
<span class="block input-icon input-icon-right">
<input type="password" v-model="model.password" class="form-control" placeholder="密码" />
<i class="icon-lock"></i>
</span>
</label>
<label data-tag="verify" class="inline clearfix">
<span class="input-icon input-icon-right">
<input type="text" v-model="model.verify" class="form-control" placeholder="验证码" />
<i class="icon-key"></i>
</span>
<img src="{:U('Login/verify')}" onClick="this.src=this.src+'?'+Math.random()">
</label>
<div class="space"></div>
<div class="clearfix">
<label class="inline">
<input class="ace" v-model="model.remember" type="checkbox" name="remember"/>
<span class="lbl">记住账号密码</span>
</label>
<button v-on:click="doSubmit()" type="button" class="width-35 pull-right btn btn-sm btn-primary">
<i class="icon-key"></i> 登陆 </button>
</div>
<div class="space-4"></div>
</fieldset>
</form>
~~~
>js代码部分
~~~JavaScript
<script type="text/javascript">
util.get("{:U('login/member')}",function (data) {
var model = (data==false)?{}:data;
var vm = new Vue({
el: "#login",
data: {
model:model,
},
methods: {
doSubmit: function() {
console.log(this.model.remember);
$.ajax({
type:'post',
data:this.model,
url:"{:U('login/login')}",
cache: false,
dataType:'json',
success:function(data){
if(data.status==true){
location.href="{:U('Index/index')}";
}else {
$('[data-tag]').siblings().removeClass('has-error');
$('[data-tag="'+data.tag+'"]').addClass('has-error');
util.alert('danger',data.message);
}
}
});
}
}
})
})
</script>
~~~
>php 后台代码
~~~php
/**
* 登录操作
*/
public function login(){
$admin = new AdminLogic();
$result = $admin->doLogin();
//读取用户权限
Rbac::saveAccessList();
$this->ajaxReturn($result);
}
~~~
>login登录模型
~~~php
<?php
/**
* Created by dh2y
* email: xiaodai54_long@163.com
* Date: 2017/6/21 9:10
* describ: 登录服务模型
*/
namespace Admin\Logic;
use Common\Model\BaseModel;
use Think\Crypt;
use Think\Model;
class AdminLogic extends BaseModel
{
protected $tableName = 'admin';
protected $labels = ['username'=>'','password'=>'','verify'=>'','remember'=>false];
protected $member;
//自动验证
protected $_validate = array(
['username','require',['tag'=>'username','error'=>'用户名必须!']], //默认情况下用正则进行验证
['verify','require',['tag'=>'verify','error'=>'验证码不能为空!'],],
['verify','checkVerify',['tag'=>'verify','error'=>'验证码错误!'],2,'callback',3],
['password','require',['tag'=>'password','error'=>'密码不能为空!'],],
['password','checkPsw',['tag'=>'password','error'=>'请输入6~16位有效字符'],2,'callback',3],
);
//检验用户
public function checkMember(){
if( $this->create()){
$map['username'] = $this->labels['username'];
$map['status'] = 1;
$this->member = $this->where($map)->find();
if ( $this->member){
return ['status' => true, 'data' => $this->member];
}
return ['status'=>false,'tag'=>'username','message'=>'用户不存在或被禁用'];
}
$error = $this->getError();
return ['status' => false,'tag'=>$error['tag'], 'message' => $error['error']];
}
//检查密码是否正确
public function checkPass($password){
if(md5($password) != $this->member['password']){
return ['status'=>false,'tag'=>'password','message'=>'密码错误'];
}
return ['status'=>true,'message'=>'恭喜!密码正确'];
}
//验证登录
public function checkLogin(){
}
//登录操作
public function doLogin(){
$result = $this->checkMember();
if ($result['status']==false){
return $result;
}
$result = $this->checkPass($this->labels['password']);
if($result['status']==true){
session(C("USER_AUTH_KEY"), $this->member['id']);//(RBAC)
session("username", $this->member['username']);
//如果为超级管理员,则无需验证(RBAC)
if($this->member['username'] == C('RBAC_SUPERADMIN')) {
session(C('ADMIN_AUTH_KEY'), true);
}
//登录日志更新
$this->member['login_time'] = time();
$this->member['login_ip'] = get_client_ip(0,true);
$this->save($this->member);
//如果记住账号密码-vue.js复选框传的是true和false字符串
if($this->labels['remember']=='true'){
$member['username'] = $this->labels['username'];
$member['password'] = $this->labels['password'];
$member['remember'] = $this->labels['remember'];
$remember = Crypt::encrypt(serialize($member),C('CRYPT_KEY'));
cookie('remember', $remember);//记住我
}else{
cookie('remember', null);
}
}
return $result;
}
//得到记住用户名和密码
public function getRemember(){
if(!cookie('remember')){
return false;
}
$remember = Crypt::decrypt(cookie('remember'),C('CRYPT_KEY'));
return unserialize($remember);
}
//验证密码规则
public function checkPsw($password){
$pattern = '/^[\S]{5,16}$/';
if(!preg_match($pattern,$password)) return false;
else return true;
}
//登录验证码操作
public function checkVerify()
{
$verify = new \Think\Verify();
return $verify->check($this->labels['verify']);
}
}
~~~