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 相关文章推荐
经典的带阴影的可拖动的浮动层
Jun 26 Javascript
利用jQuery接受和处理xml数据的代码(.net)
Mar 28 Javascript
javascript显示用户停留时间的简单实例
Aug 05 Javascript
Jquery取得iframe下内容的方法
Nov 18 Javascript
JQuery以JSON方式提交数据到服务端示例代码
May 05 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
Nov 13 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
Jun 19 Javascript
微信小程序实现左右联动的实战记录
Jul 05 Javascript
TypeScript开发Node.js程序的方法
Apr 30 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
May 17 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
Nov 19 Javascript
AJAX XMLHttpRequest对象创建使用详解
Aug 20 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
一次编写,随处运行
2006/10/09 PHP
PHP添加MySQL数据记录代码
2008/06/07 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
php短址转换实现方法
2015/02/25 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
基于jQuery的获取标签名的代码
2012/07/16 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
python3.5绘制随机漫步图
2018/08/27 Python
python for循环remove同一个list过程解析
2019/08/14 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
留学自荐信写作方法
2014/01/27 职场文书
医学生自我评价
2014/01/27 职场文书
运动会通讯稿500字
2014/02/20 职场文书
人口与计划生育目标管理责任书
2014/07/29 职场文书
法定代表人身份证明书
2014/09/10 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
通知书大全
2015/04/27 职场文书
公司酒会主持词
2015/07/02 职场文书
新闻稿格式范文
2015/07/18 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS