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 相关文章推荐
Jquery在指定DIV加载HTML示例代码
Feb 17 Javascript
一个简单的jquery的多选下拉框(自写)
May 05 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
Jun 19 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
Aug 01 Javascript
Javascript 引擎工作机制详解
Nov 30 Javascript
实现一个简单的vue无限加载指令方法
Jan 10 Javascript
jquery实现拖动效果(代码分享)
Jan 25 Javascript
jQuery实现获取选中复选框的值实例详解
Jun 28 jQuery
vuejs实现ready函数加载完之后执行某个函数的方法
Aug 31 Javascript
JavaScript对象拷贝与赋值操作实例分析
Dec 10 Javascript
js实现黑白div块画空心的图形
Dec 13 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
Sep 01 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
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
javascript 常用功能总结
2012/03/18 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
js获取内联样式的方法
2015/01/27 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
使用python实现链表操作
2018/01/26 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
全球工业:Global Industrial
2020/02/01 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
酒吧创业计划书
2014/01/18 职场文书
读书小明星事迹材料
2014/05/03 职场文书
我爱读书演讲稿
2014/05/07 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
客房服务员岗位职责
2015/02/09 职场文书
教师学期个人总结
2015/02/11 职场文书
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle