国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

laravel - Vue前端單頁項目的用戶認證思路
滿天的星座
滿天的星座 2017-05-16 16:47:44
0
5
825

環(huán)境:

  • Backend:Laravel + Passport

  • Frontend:Vue 2.0 + Vuex + Vue-router

問題:

前端登陸后獲取access_token,保存在localStorage中,那么用戶退出登錄的話需要怎么操作?清空localStorage嗎?是否需要向后端再發(fā)送請求?

如果用戶沒有點擊退出登錄,而是直接關(guān)閉瀏覽器或者窗口呢,下次訪問時,localStorage里的access_token依然存在,這樣的話安全性不太好吧?

我的access_token的有效期是一年,那么每次登錄都會重新生成,這個怎么解決?

求前端用戶認證的處理思路……萬分感謝?。?!

滿天的星座
滿天的星座

全部回復(5)
Peter_Zhu

剛好在做JWT的驗證,用axios和router做驗證,暫時還未完成,先貼一部分代碼參考

axios部分

import Vue from 'vue'
import axios from 'axios'

var http = axios.create({
  baseURL: process.env.API_URL
});

http.init = function () {
  http.interceptors.request.use(config => {
    this.load = true;
    if (localStorage.JWT_TOKEN) {
      config.headers = {'Authorization': localStorage.JWT_TOKEN};
    }
    return config;
  }, err => {
    this.load = false;
    console.error(err);
  });
  http.interceptors.response.use(res => {
    this.load = false;
    if (res.data.code === 1) {
      return res.data.data;
    } else {
      if (res.data.code == 4) {
        localStorage.removeItem('JWT_TOKEN');
        this.$router.push('/Login');
        alert(res.data.msg);
      } else if (res.data.code == 401) {
        localStorage.removeItem('JWT_TOKEN');
        this.$router.push('/Login');
      } else {
        throw new Error(res.data.msg);
      }
    }
  }, err => {
    this.load = false;
    throw new Error(res.data.msg);
  });
}

Vue.prototype.$http = http;

router部分:

import Vue from 'vue'
import Router from 'vue-router'

function include (name) {
  return resolve => require(['components/' + name], resolve);
}

function route (name) {
  return {
    name: name,
    path: name,
    component: include(name)
  }
}

Vue.use(Router);

var router = new Router({
  base: '/admin/',
  mode: 'history',
  routes: [
    {
      name: 'Index',
      path: '/',
      component: include('Index'),
      children: [
        {
          name: 'User',
          path: 'User/:page/:rows',
          component: include('User')
        }
      ]
    },
    {
      name: 'Login',
      path: '/Login',
      component: include('Login')
    },
    {
      path: '*',
      redirect: '/'
    }
  ]
})

router.beforeEach(({name}, from, next) => {
  if (localStorage.JWT_TOKEN) {
    if (name == 'Login') {
      next('/');
    } else {
      next();
    }
  } else {
    if (name == 'Login') {
      next();
    } else {
      next({name: 'Login'});
    }
  }
});

export default router;
PHPzhong

退出時刪除localStorage中的access_token
可以給Vuex寫個插件,每次commit mutation時,更新一下access_token的刷新時間。
下次登錄時,判斷這個刷新時間,5分鐘前了,就認為登錄信息過期了。

如果不想把access_token放到localStorage中,可以放在Vuex中,每次都需要重新登錄。access_token放到localStorage中,可以放在Vuex中,每次都需要重新登錄。
重新登錄時,你可以沒必要都重新生成access_token重新登錄時,你可以沒必要都重新生成access_token吧。

Peter_Zhu

剛好總結(jié)了一個項目,歡迎star~
【vue+axios】一個項目學會前端實現(xiàn)登錄攔截

黃舟

認證信息以后臺為準,不管是登錄還是退出都要發(fā)送請求,然后根據(jù)api返回的結(jié)果前端進行操作,如果不記住認證信息用sesionStorage好點

大家講道理

設(shè)置路由的攔截器,攔截除了login和logout的所有頁面,檢查本地變量user是否存在,存在則判斷上次校驗時間,如果超出1分鐘則重新校驗。

router.beforeEach((to, from, next) => {
  // to 和 from 都是 路由信息對象
  //var auth = to.matched[0].default.auth;
  //console.log(to);
  if (to.path =="/login" || to.path =="/logout") {
    next();
  }
  else {
    const user = store.state.system.user;
    if(user){
      const time = new Date().getTime();
      if(time-user.lastCheckTime > 60*1000){ // 如果上次檢查時間大于1分鐘,則調(diào)用服務端接口判斷session 是否依然有效
        store.dispatch("checkLogin",(error,isLogined)=>{ // 異步檢查是否狀態(tài)有效
          if(error || !isLogined){
            console.warn("登錄超時");
            next({'path':'/login',query:{backUrl:to.fullPath}});
          }
          else{
            next();
          }
        });
      }
      else{
        next();
      }

    }
    else{
      console.warn("需要登錄");
      next({'path':'/login',query:{backUrl:to.fullPath}});
    }
  }
});
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板