vue 未登录或登录失效重定向到登录页,登录后再回到登录前的页面
生活随笔
收集整理的這篇文章主要介紹了
vue 未登录或登录失效重定向到登录页,登录后再回到登录前的页面
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實現思路:
1.router中給需要登錄后才能訪問的頁面配置meta:{needLogin:true}
2.登錄頁面,調用登錄接口成功后,給cookie中存入用戶信息(我這里是存uuid和sessionid相關內容)
3.request.js的接口請求攔截器中,根據接口返回的code值判斷用戶是否登錄或登錄是否已失效(我這里是未登錄和已失效code==1000),失效的話,將cookie中的用戶信息移除
4. main.js中使用router.beforeEach,步驟1設置的需登錄才能訪問的頁面中,通過判斷cookie中是否有用戶的uuid和sessionid信息,確定用戶是否已登錄(未登錄時uuid信息肯定不存在,但登錄失效時uuid是存在的,所以要在步驟3中通過判斷code值,清除uuid新增)。當用戶未登錄時跳轉到登錄頁,并將當前頁面的重定向路徑帶到登錄頁面地址中
1.router index.js 配置哪些頁面需要登錄才能訪問
2.main.js判斷用戶是否已登錄(我用的cookie存儲的用戶信息,存儲方法在auth.js里。)
import Vue from 'vue'
import * as auth from '@/utils/auth'
//判斷是否登錄 router.beforeEach(function (to, from, next) { if (to.meta.needLogin) { //從cookie中獲取用戶信息,判斷是否已登錄 if (auth.getAdminInfo().userUuid) { next(); //表示已經登錄 } else { //未登錄 //next可以傳遞一個路由對象作為參數 表示需要跳轉到的頁面 next({ name: "login", query: {redirect: to.meta.redirect} //登錄后再跳回此頁面時要做的配置 }); } } else { //表示不需要登錄 next(); //繼續往后走 } });
3.auth.js里代碼,重點部分標紅
import Cookies from 'js-cookie'
const TokenKey = 'Admin-Token'
const rolesName = "adminRoles"
const adminInfo = "adminInfo"
// 存儲數據localStorage(數組對象格式)
export function setStorageObj(key,obj) {
var str = JSON.stringify(obj);
return localStorage.setItem(key,str);
}
//獲取數據(數組對象格式)
export function getStorageObj(key) {
return JSON.parse(localStorage.getItem(key));
}
//存儲數據(字符串)
export function setStorage(key,data) {
return localStorage.setItem(key,data);
}
//獲取數據(字符串)
export function getStorage(key) {
return localStorage.getItem(key)
}
//清除數據(所有格式)
export function removeStorage(key) {
return localStorage.removeItem(key);
}
//存儲token
export function getToken() {
return Cookies.get(TokenKey)
}
export function setToken(token) {
return Cookies.set(TokenKey, token)
}
export function removeToken() {
return Cookies.remove(TokenKey)
}
//存儲角色
export function getAdminRoles() {
const roles = Cookies.get(rolesName)
if(roles){
console.log(roles)
return JSON.parse(roles)
}
return ''
}
export function setAdminRoles(roles) {
return Cookies.set(rolesName, JSON.stringify(roles))
}
//獲取用戶信息
export function getAdminInfo() {
console.log('獲取用戶信息')
const admin = Cookies.get(adminInfo)
if(admin){
return JSON.parse(admin)
}
return ''
}
//存儲用戶信息
export function setAdminInfo(admin) {
return Cookies.set(adminInfo, JSON.stringify(admin))
}
//移除用戶信息
export function removeAdminInfo() {
return Cookies.remove(adminInfo)
}
4.login.vue頁面
methods: {
//登錄
login(formName){
this.$refs[formName].validate((valid) => {
if (valid) {
console.log('登錄',this.form)
this.$store.dispatch('user/getUserLogin',this.form).then(() => {
this.$router.push({ path: this.redirect || '/' })
}).catch(() => {
this.loading = false
})
} else {
console.log('error submit!!');
return false;
}
});
}
}
5.vuex(調用登錄接口成功后,存儲用戶信息)
6.vuex登出
7.請求攔截
import axios from 'axios'
import { MessageBox, Message} from 'element-ui'
import store from '@/store'
import ElementUI from 'element-ui'
import QS from 'qs'
import * as auth from '@/utils/auth'
// import router from '@/router'
// const hostUrl = 'http://192.168.0.189:8888'
// create an axios instance
const service = axios.create({
// baseURL: hostUrl,
timeout: 50000 // request timeout
})
//請求頭配置
service.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
// request interceptor
service.interceptors.request.use(
config => {
//給請求頭添加內容的話,從這里配置
// if (store.getters.token) {
// config.headers['Authorization'] = getToken()
// }
return config
},
error => {
console.log(error) // for debug
return Promise.reject(error)
}
)
// response interceptor
service.interceptors.response.use(
response => {
//未登錄、登錄過期code==1000
if(response.data.code == 1000){
store.dispatch('user/logout').then(() => {
location.reload()
})
}
//其他錯誤,根據接口返回數據的規律調整
if(response.data.code != 200 && (response.data.code != 1000)){
ElementUI.Message({
type:'error',
message:response.data.message
})
return Promise.reject('error')
}
return Promise.resolve(response.data)
},
error => {
console.log('error',error);
Message({
message: '服務器內部錯誤',
type: 'error',
duration: 3 * 1000
})
return Promise.reject(error)
}
)
class http {
static async getPage(url, params){
return service.get(url, { params: params })
}
static async post(url, params){
return service.post(url, QS.stringify(params))
}
static async postItem(url, params){
if(!params){
params = {};
}
// params['userUuid']='9E396DE798B240FA8D2162BFE6AC494C';
// params['sessionId']='16e413064c97466c9bef6d9f9e69c5aa';
// 獲取userUuid和sessionId
params['userUuid'] = auth.getAdminInfo().userUuid;
params['sessionId'] = auth.getAdminInfo().sessionId;
return service.post(url, params)
}
static async postNew(url, params){
return service.post(url, params)
}
}
export default http
總結
以上是生活随笔為你收集整理的vue 未登录或登录失效重定向到登录页,登录后再回到登录前的页面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 姓屈的鸡宝宝起名大全(小鸡宝宝的取名指南
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?