Home  >  Article  >  Web Front-end  >  How to store token in client localStorage

How to store token in client localStorage

php中世界最好的语言
php中世界最好的语言Original
2018-04-17 09:57:138857browse

This time I will show you how to store the token in the client's localStorage. What are the precautions when the token is stored in the client's localStorage. The following is a practical case, let's take a look.

Our backend has such an interface:

http://localhost/yiiserver/web/index.php/token?client_appid=aaa&client_appkey=bbb

In fact, just generate a token in clients (understood as user table)

The client_appid here is equivalent to the username, and client_appkey is equivalent to the password.

In this way, a access-token will be generated after backend authentication. We need to save this access-token on the client.

Note: Our front-end is generally deployed on another server and will cross domains. The back-end needs to handle cross-domain issues. You can write the following code in 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');

Front-end routine

Note that since our project has already used VueX, then I must create a module in Store (a concept in vuex).

We have created a new UsersModule.js to handle the user login business. Be careful not to forget to add it to the entry fileusers-index.js Introduction. If our "Member Backstage" also needs user-related data, it must also be introduced.

Modify in 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 part: We wrote a userLogin() method to send http requests to the back-end server. The data returned successfully by the request is saved to the client by calling the setUser() method defined in the mutations part. end.

Note: The userLogin() method in actions is for calling on the user login page, that is, in userslogin.vue.

So come to userlogin.vue and modify the following code:

Let’s test whether it has been successfully saved to the client’s 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));
   }
  }

2. If our membership background

http://localhost:8080/member

It is also necessary to obtain the user's login information, such as username. to display on the navigation bar.

First of all, it should be in the entry file member-index.js of the member backend module:

//引入Module
import ResModule from './../Store/modules/ResModules';
import UsersMoule from "./../Store/modules/UsersModule";
const vuex_config = new Vuex.Store({
 modules: {
  res:ResModule,
  users:UsersMoule
 }
});

Then we can, for example, in the navigation bar component navbar.vue:

<a href="##" rel="external nofollow" >{{this.$store.state.users.currentUser.UserName}}</a>

In this way, access the attribute in users.

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:



The above is the detailed content of How to store token in client localStorage. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn