From 4e6a060dfe743e28d71b099b36e475960f86432f Mon Sep 17 00:00:00 2001 From: chenghongxing <1126263215@qq.com> Date: Mon, 20 Jul 2020 22:39:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20add=20login=20blocking;=20:star2:=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E7=99=BB=E5=BD=95=E6=8B=A6=E6=88=AA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/layouts/header/HeaderlAvatar.vue | 12 ++++++-- src/mock/user/login.js | 1 + src/pages/login/Login.vue | 2 +- src/router/index.js | 14 ++++++++- src/services/index.js | 5 +-- src/services/user.js | 11 +++++-- src/utils/request.js | 46 ++++++++++++++++++++++++++-- 7 files changed, 79 insertions(+), 12 deletions(-) diff --git a/src/layouts/header/HeaderlAvatar.vue b/src/layouts/header/HeaderlAvatar.vue index 73f7c87..256580a 100644 --- a/src/layouts/header/HeaderlAvatar.vue +++ b/src/layouts/header/HeaderlAvatar.vue @@ -15,10 +15,10 @@ - + 退出登录 - + @@ -26,12 +26,18 @@ diff --git a/src/mock/user/login.js b/src/mock/user/login.js index 56fc8da..4bf77f5 100644 --- a/src/mock/user/login.js +++ b/src/mock/user/login.js @@ -21,6 +21,7 @@ Mock.mock('/login', 'post', ({body}) => { result.data = {} result.data.user = user result.data.token = 'Authorization:' + Math.random() + result.data.expireAt = new Date(new Date().getTime() + 30 * 60 * 1000) } return result }) diff --git a/src/pages/login/Login.vue b/src/pages/login/Login.vue index adef921..f9f42e5 100644 --- a/src/pages/login/Login.vue +++ b/src/pages/login/Login.vue @@ -110,9 +110,9 @@ export default { const result = res.data if (result.code >= 0) { const user = result.data.user + setAuthorization({token: result.data.token, expireAt: new Date(result.data.expireAt)}) this.$router.push('/dashboard/workplace') this.$store.commit('account/setUser', user) - setAuthorization({token: result.data.token}) this.$message.success(result.message, 3) } else { this.error = result.message diff --git a/src/router/index.js b/src/router/index.js index 6a93c55..8938b5c 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,4 +1,5 @@ import Vue from 'vue' +import {checkAuthorization} from '@/utils/request' import Router from 'vue-router' import PageView from '@/layouts/PageView' import BlankView from '@/layouts/BlankView' @@ -7,7 +8,7 @@ import Login from '@/pages/login/Login' Vue.use(Router) -export default new Router({ +const router = new Router({ routes: [ { path: '/login', @@ -201,3 +202,14 @@ export default new Router({ } ] }) + +// 登录拦截 +router.beforeEach((to, from, next) => { + if (to.path !== '/login' && !checkAuthorization()) { + next({path: '/login'}) + } else { + next() + } +}) + +export default router diff --git a/src/services/index.js b/src/services/index.js index bf4cfa7..4c0b94a 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -1,5 +1,6 @@ -import {login} from './user' +import {login, logout} from './user' export { - login + login, + logout } diff --git a/src/services/user.js b/src/services/user.js index b6447c3..6216c98 100644 --- a/src/services/user.js +++ b/src/services/user.js @@ -1,5 +1,5 @@ import {LOGIN} from '@/services/api' -import {request, METHOD} from '@/utils/request' +import {request, METHOD, removeAuthorization} from '@/utils/request' /** * 登录服务 @@ -14,4 +14,11 @@ async function login(name, password) { }) } -export {login} +/** + * 退出登录 + */ +function logout() { + removeAuthorization() +} + +export {login, logout} diff --git a/src/utils/request.js b/src/utils/request.js index 01d2457..48af7ca 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -43,13 +43,13 @@ async function request(url, method, params) { /** * 设置认证信息 - * @param token {Object} + * @param auth {Object} * @param authType {AUTH_TYPE} 认证类型,默认:{AUTH_TYPE.BEARER} */ function setAuthorization(auth, authType = AUTH_TYPE.BEARER) { switch (authType) { case AUTH_TYPE.BEARER: - Cookie.set(xsrfHeaderName, 'Bearer ' + auth.token) + Cookie.set(xsrfHeaderName, 'Bearer ' + auth.token, {expires: auth.expireAt}) break case AUTH_TYPE.BASIC: case AUTH_TYPE.AUTH1: @@ -59,9 +59,49 @@ function setAuthorization(auth, authType = AUTH_TYPE.BEARER) { } } +/** + * 移出认证信息 + * @param authType {AUTH_TYPE} 认证类型 + */ +function removeAuthorization(authType = AUTH_TYPE.BEARER) { + switch (authType) { + case AUTH_TYPE.BEARER: + Cookie.remove(xsrfHeaderName) + break + case AUTH_TYPE.BASIC: + case AUTH_TYPE.AUTH1: + case AUTH_TYPE.AUTH2: + default: + break + } +} + +/** + * 检查认证信息 + * @param authType + * @returns {boolean} + */ +function checkAuthorization(authType = AUTH_TYPE.BEARER) { + switch (authType) { + case AUTH_TYPE.BEARER: + if (Cookie.get(xsrfHeaderName)) { + return true + } + break + case AUTH_TYPE.BASIC: + case AUTH_TYPE.AUTH1: + case AUTH_TYPE.AUTH2: + default: + break + } + return false +} + export { METHOD, AUTH_TYPE, request, - setAuthorization + setAuthorization, + removeAuthorization, + checkAuthorization }