vue项目实现记住密码到cookie功能
一、实现功能:
1.记住密码勾选,点登陆时,将账号和密码保存到cookie,下次登陆自动显示到表单内
2.不勾选,点登陆时候则清空之前保存到cookie的值,下次登陆需要手动输入
二、思路:
大体思路就是通过存/取/删cookie实现的;每次进入登录页,先去读取cookie,如果浏览器的cookie中有账号信息,就自动填充到登录框中,存cookie是在登录成功之后,判断当前用户是否勾选了记住密码,如果勾选了,则把账号信息存到cookie当中,效果图如上:
三、具体实现:
html部分
<div class="ms-login">
<div class="login-form">
<el-form ref="form" :model="form" :rules="rules">
<el-form-item prop="name">
<el-input v-model="form.name" placeholder="用户名" prefix-icon="el-icon-user">
<!--<i slot="prefix" class="el-input__icon el-icon-user"></i>-->
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input type="password" v-model="form.password" @keyup.enter.native="onSubmit('form')" placeholder="密 码" prefix-icon="el-icon-lock"></el-input>
</el-form-item>
<el-form-item prop="rem">
<el-checkbox v-model="form.rem">记住密码,下次直接登录</el-checkbox>
</el-form-item>
<el-form-item>
<el-button @click="onSubmit('form')" v-loading="submitState">登 录</el-button>
<!--<el-button @click="testHttp">Test</el-button>-->
</el-form-item>
</el-form>
</div>
</div>
js部分:
data() {
return {
submitState: false,
form: {
name: '',
password: '',
rem: false
}
}
},
mounted() {
//页面加载调用获取cookie值
this.getCookie();
},
methods: {
/**
* 提交
* @param formName
*/
onSubmit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.submitState = true;
const self = this;
//判断复选框是否被勾选 勾选则调用配置cookie方法
if (self.form.rem == true) {
console.log("checked == true");
//传入账号名,密码,和保存天数3个参数
self.setCookie(self.form.name, self.form.password,self.form.rem, 30);
}else {
console.log("清空Cookie");
//清空Cookie
self.clearCookie();
}
//与后端请求代码,本功能不需要与后台交互所以省略
console.log("登陆成功");
this.$axios.post('/public/user/login',{pwd:this.form.password,username:this.form.name}).then(res => {
if (res.data.code === this.$webConfig.httpSuccessStatus) {
localStorage.accountName = res.data.data.real_name;
this.$ls.set(this.$webConfig.authTokenName,res.data.data);
}else {
this.$message(res.data.message);
}
this.submitState = false;
}).catch(()=>{
this.submitState = false;
})
} else {
console.log('error submit!!');
return false;
}
});
},
//设置cookie
setCookie(c_name, c_pwd,c_status, exdays) {
var exdate = new Date(); //获取时间
exdate.setTime(exdate.getTime() + 24 * 60 * 60 * 1000 * exdays); //保存的天数
//字符串拼接cookie
window.document.cookie = "userName" + "=" + c_name + ";path=/;expires=" + exdate.toGMTString();
window.document.cookie = "userPwd" + "=" + c_pwd + ";path=/;expires=" + exdate.toGMTString();
window.document.cookie = "userPwdStatus" + "=" + c_status + ";path=/;expires=" + exdate.toGMTString();
console.log(window.document.cookie);
},
//读取cookie
getCookie: function() {
if (document.cookie.length > 0) {
var arr = document.cookie.split('; '); //这里显示的格式需要切割一下自己可输出看下
for (var i = 0; i < arr.length; i++) {
var arr2 = arr[i].split('='); //再次切割
//判断查找相对应的值
console.log(arr,arr2);
if (arr2[0] == 'userName') {
this.form.name = arr2[1]; //保存到保存数据的地方
} else if (arr2[0] == 'userPwd') {
this.form.password = arr2[1];
} else if (arr2[0] == 'userPwdStatus') {
if(arr2[1] == 'true'){
this.form.rem = true;
}else {
this.form.rem = false;
}
}
}
}
},
//清除cookie
clearCookie: function() {
this.setCookie("", "", -1); //修改2值都为空,天数为负1天就好了
}
浏览器中的cookie信息如下图,注意这里的cookie的expire/Max-Age过期时间,这个时间是格林尼治标准时间GMT,世界统一的时间,GMT+8小时就是北京时间。(这里不做加密功能)