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 相关文章推荐
用javascript实现计算两个日期的间隔天数
Aug 14 Javascript
同时使用n个window onload加载实例介绍
Apr 25 Javascript
js实现按钮加背景图片常用方法
Nov 01 Javascript
javascript实现全局匹配并替换的方法
Apr 27 Javascript
js去除浏览器默认底图的方法
Jun 08 Javascript
编写高性能Javascript代码的N条建议
Oct 12 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
Nov 24 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
Oct 19 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
Mar 02 Javascript
值得收藏的vuejs安装教程
Nov 21 Javascript
详解项目升级到vue-cli3的正确姿势
Jan 28 Javascript
基于jQuery拖拽事件的封装
Nov 29 jQuery
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 团购折扣计算公式
2011/11/24 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
Python编程之string相关操作实例详解
2017/07/22 Python
Python工厂函数用法实例分析
2018/05/14 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
pygame实现飞机大战
2020/03/11 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
小学生常见病防治方案
2014/06/06 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
学术会议领导致辞
2015/07/29 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python