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
}