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 相关文章推荐
利用location.hash实现跨域iframe自适应
May 04 Javascript
Extjs4 类的定义和扩展实例
Jun 28 Javascript
jquery中获得元素尺寸和坐标的方法整理
May 18 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
node.js中的http.createServer方法使用说明
Dec 14 Javascript
Jquery实现图片预加载与延时加载的方法
Dec 22 Javascript
老生常谈jquery id选择器和class选择器的区别
Feb 12 Javascript
vue.js动态数据绑定学习笔记
May 19 Javascript
微信小程序 rich-text的使用方法
Aug 04 Javascript
vue中动态设置meta标签和title标签的方法
Jul 11 Javascript
webpack3.0升级4.0的方法步骤
Apr 02 Javascript
js实现鼠标切换图片(无定时器)
Jan 27 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 str_pad 函数用法简介
2009/07/11 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
javascript parseInt 函数分析(转)
2009/03/21 Javascript
javascript动画浅析
2012/08/30 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python最长公共子串算法实例
2015/03/07 Python
详解python时间模块中的datetime模块
2016/01/13 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
python的sorted用法详解
2019/06/25 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
MADE法国:提供原创设计师家具
2018/09/18 全球购物
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
快递业务员岗位职责
2014/01/06 职场文书
销售员岗位职责范本
2014/02/03 职场文书
法人授权委托书范本
2014/04/04 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android