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 相关文章推荐
parseInt parseFloat js字符串转换数字
Aug 01 Javascript
jQuery插件windowScroll实现单屏滚动特效
Jul 14 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
Sep 14 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
Sep 23 Javascript
如何正确理解javascript的模块化
Mar 02 Javascript
jQuery+ajax实现修改密码验证功能实例详解
Jul 06 jQuery
基于wordpress的ajax写法详解
Jan 02 Javascript
微信小程序去除左上角返回键的实现方法
Mar 06 Javascript
vue如何使用外部特殊字体的操作
Jul 30 Javascript
解决vue刷新页面以后丢失store的数据问题
Aug 11 Javascript
JavaScript代码实现简单计算器
Dec 27 Javascript
JavaScript 声明私有变量的两种方式
Feb 05 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
用PHP编写PDF文档生成器
2006/10/09 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
js鼠标左右键 键盘值小结
2010/06/11 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
JavaScript函数的特性与应用实践深入详解
2018/12/30 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
python实现简单的socket server实例
2015/04/29 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
python实现矩阵打印
2019/03/02 Python
python hash每次调用结果不同的原因
2019/11/21 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
python烟花效果的代码实例
2020/02/25 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
春节活动策划方案
2014/01/24 职场文书
小学生自我评价范文
2014/01/25 职场文书
社区敬老月活动实施方案
2014/02/17 职场文书
公司授权委托书
2014/04/04 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
死亡证明书样本说明
2014/10/18 职场文书
周一给客户的问候语
2015/11/10 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
python保存图片的四个常用方法
2022/02/28 Python
TS 类型收窄教程示例详解
2022/09/23 Javascript