前面我们已经实现了用户登录
http://blog.csdn.net/github_26672553/article/details/70048077
我们先把这个『用户登录功能部分』优化一下,比如:登录成功之后跳转到会员中心。
1、给用户登录方法多加一个参数,作为登录成功之后的回调函数
原方法:
userLogin(context,{user_name,user_pass})
多加一个参数:
userLogin(context,{user_name,user_pass,callback})
这样在页面上调用的时候(userlogin.vue
组件调用的时候),代码也需要改动了:
this.$store.dispatch("userLogin",{"user_name":this.UserModel.user_name,"user_pass":this.UserModel.user_pass,"callback":function(){
self.location = "/member"; //跳转到会用中心
}})
其实除了登录成功网页上有业务处理(比如跳转),登录失败网页上也应该提示。
那么就需要2个回到函数了,我们这里只是演示套路,所以就只写了一个成功的回调函数。
2、上面我们只是说明要增加一个callback参数,具体的代码还没有写呢
UsersModule.js
中:
actions:{
userLogin(context,{user_name,user_pass,callback}){
// 发送get请求做权限认证(真实开发建议用post的方式)
let url = "http://localhost/yiiserver/web/index.php/token?client_appid="+user_name+"&client_appkey="+user_pass;
console.log(url);
Vue.http.get(url)
.then((res)=>{
if (res!=null && res.body!=undefined && "access-token" in res.body){
var token = res.body["access-token"];
if (token != ""){
// 后端API验证通过
// 调用上面mutations里定义的方法
context.commit("setUser",{"user_name":user_name,"user_token":token,callback});
}
}else{
alert("用户名密码错误");
}
},(res)=>{
alert("请求失败进入这里")
});
}
}
我们还是要通过context.commit()
把回到函数传给mutations部分定义的setUser
方法,这个方法是做用户登录名和token保存业务的。
mutations:{
setUser(state,{user_name,user_token,callback}){
// 在这里把用户名和token保存起来
localStorage.setItem("currentUser_name",user_name);
localStorage.setItem("currentUser_token",user_token);
// 保存之后,执行回到函数
callback();
}
},
保存之后,就执行这个回到函数。这样就通知网页上了。
通过以上的代码,我们要学习的套路是:有些方法里是只处理业务逻辑的(比如保存用户名和token),而一些网页效果(提示信息)的代码不能写在一起。
处理navbar上的用户登录状态
来到navbar.vue,我们写一个计算属性:
computed:{
showUserNameLabel(){ // 是否显示用户登录标签
if(this.$store.state.users.currentUser.UserName == "guest"){
return true
}else {
return false;
}
}
},
然后模板中:
<el-menu-item index="3" v-if="showUserNameLabel">
<v-link @click="userLoginAndReg">注册/登录</v-link>
</el-menu-item>
<el-menu-item index="3" v-if="!showUserNameLabel">
<a href="##">当前登录用户:{{this.$store.state.users.currentUser.UserName}}</a>
</el-menu-item>