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与CSS复习(《精通javascript》)
Jun 29 Javascript
jQuery.clean使用方法及思路分析
Jan 07 Javascript
JS获取页面input控件中所有text控件并追加样式属性
Feb 25 Javascript
js对文章内容进行分页示例代码
Mar 05 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
Oct 17 Javascript
jQuery中append()方法用法实例
Dec 25 Javascript
原生js实现移动开发轮播图、相册滑动特效
Apr 17 Javascript
jQuery简单操作cookie的插件实例
Jan 13 Javascript
探索Javascript中this的奥秘
Dec 11 Javascript
通过说明与示例了解js五种设计模式
Jun 17 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
Jun 20 Javascript
多种类型jQuery网页验证码插件代码实例
Jan 09 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
微信支付开发维权通知实例
2016/07/12 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
python实现kmp算法的实例代码
2019/04/03 Python
基于python实现高速视频传输程序
2019/05/05 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
Python3实现英文字母转换哥特式字体实例代码
2020/09/01 Python
python中四舍五入的正确打开方式
2021/01/18 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
教师个人鉴定材料
2014/02/08 职场文书
工程力学专业自荐信范文
2014/03/17 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
校运会宣传稿大全
2015/07/23 职场文书
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
Python中with上下文管理协议的作用及用法
2022/03/18 Python
搭建Yolov5服务器
2022/04/30 Servers