vue生成token保存在客户端localStorage中的方法


Posted in Javascript onOctober 25, 2017

前面我们已经了解了可以通过localStorage在客户端(浏览器)保存数据。

我们后端有这样一个接口:

http://localhost/yiiserver/web/index.php/token?client_appid=aaa&client_appkey=bbb

其实就向clients(理解为用户表即可)里面去生成一个token 

vue生成token保存在客户端localStorage中的方法

vue生成token保存在客户端localStorage中的方法 

这里的client_appid 就相当于用户名,client_appkey 就相当于密码。 

这样后端认证之后会生成一个access-token,我们需要把这个access-token 保存在客户端。

注意:我们前端一般部署在另外的服务器上,会跨域,后端要处理跨域的问题,在PHP中可以写上如下代码:

//指定允许其他域名访问
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET,POST");
header('Access-Control-Allow-Headers: X-Requested-With,content-type,if-modified-since');

前端的套路

注意,我们项目既然早已用上了VueX,那么我肯定就要在Store(vuex里的概念)里面来创建一个module。 

vue生成token保存在客户端localStorage中的方法

我们新建了一个UsersModule.js 来处理用户登录的业务,注意不要忘记在入口文件users-index.js 中引入。如果我们的『会员后台』也需要用户相关数据,也要引入。 

users-index.js 里修改:

//引入模块
import ResModule from './../Store/modules/ResModules';
import UsersModule from "./../Store/modules/UsersModule";
const vuex_config = new Vuex.Store({
 modules: {
  res:ResModule,
  users:UsersModule
 }
});

1、UsersModule.js

import Vue from "vue";

export default {
 state:{
  currentUser:{
   get UserName(){
    return localStorage.getItem("currentUser_name");
   },
   get UserToken(){
    return localStorage.getItem("currentUser_token");
   }
  }
 },
 mutations:{
  setUser(state,{user_name,user_token}){
   // 在这里把用户名和token保存起来
   localStorage.setItem("currentUser_name",user_name);
   localStorage.setItem("currentUser_token",user_token);
  }
 },
 actions:{
  userLogin(context,{user_name,user_pass}){
   // 发送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});
      }
     }else{
      alert("用户名密码错误");
     }
    },(res)=>{
     alert("请求失败进入这里")
    });
  }
 }
}

actions部分:我们写了一个userLogin()方法,来发送http请求后端服务器,请求成功返回的数据调用在mutations部分定义的setUser()方法保存到客户端。 

注意:actions里的userLogin()方法,是供在用户登录页调用的,也就是userslogin.vue里。 

所以来到userlogin.vue,修改如下代码:

我们来测试一下,有没有成功保存到客户端的localStorage 中: 

methods:{
   login(){

    // 这个验证是element-ui框架提供的方法
    this.$refs["users"].validate(function (flag) {
     if(flag){
      /*localStorage.setItem("currentUser",this.UserModel.user_name);
      alert("用户登录成功");*/

      this.$store.dispatch("userLogin",{"user_name":this.UserModel.user_name,"user_pass":this.UserModel.user_pass})
     }else{
      alert("用户名密码必填");
     }
    }.bind(this));
   }
  }

vue生成token保存在客户端localStorage中的方法

2、如果我们的会员后台 

http://localhost:8080/member 

也需要获取用户的登录信息,比如用户名。来显示到导航栏上。

首先是应该在会员后台模块的入口文件member-index.js中:

//引入Module
import ResModule from './../Store/modules/ResModules';
import UsersMoule from "./../Store/modules/UsersModule";
const vuex_config = new Vuex.Store({
 modules: {
  res:ResModule,
  users:UsersMoule
 }
});

然后我们就可以在,比如导航栏组件navbar.vue中:

<a href="##" rel="external nofollow" >{{this.$store.state.users.currentUser.UserName}}</a>

通过这样的方式,访问users里的属性。 

vue生成token保存在客户端localStorage中的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
父子窗体间传递JSON格式的数据的代码
Dec 25 Javascript
JS实现商品倒计时实现代码
May 03 Javascript
jquery 根据name名获取元素的value值
Feb 27 Javascript
javascript实现简单的二级联动
Mar 19 Javascript
JavaScript原型及原型链终极详解
Jan 04 Javascript
C#微信小程序服务端获取用户解密信息实例代码
Mar 10 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
Apr 17 jQuery
JS简单实现数组去重的方法分析
Oct 14 Javascript
Angular中点击li标签实现更改颜色的核心代码
Dec 08 Javascript
仿淘宝JSsearch搜索下拉深度用法
Jan 15 Javascript
微信小程序websocket聊天室的实现示例代码
Feb 12 Javascript
Vue实现验证码功能
Dec 03 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
Oct 25 #Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
Oct 25 #Javascript
vue语法之拼接字符串的示例代码
Oct 25 #Javascript
浅谈Vue.nextTick 的实现方法
Oct 25 #Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
Oct 25 #Javascript
浅谈Node.js之异步流控制
Oct 25 #Javascript
AngularJS 实现购物车全选反选功能
Oct 24 #Javascript
You might like
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
php中this关键字用法分析
2016/12/07 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
js中split()方法得到的数组长度问题
2018/07/19 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
Python内置模块logging用法实例分析
2018/02/12 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
简单的Python调度器Schedule详解
2019/08/30 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
flask实现验证码并验证功能
2019/12/05 Python
python实现扫雷游戏
2020/03/03 Python
python实现udp聊天窗口
2020/03/31 Python
python调用win32接口进行截图的示例
2020/11/11 Python
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
中文专业毕业生自荐信
2013/10/28 职场文书
大学生学习党课思想汇报
2014/01/03 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
中秋节超市促销方案
2014/01/30 职场文书
安全生产活动月方案
2014/03/09 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
SQL中的三种去重方法小结
2021/11/01 SQL Server