Skip to content

Commit 8110caf

Browse files
committed
Cookie
1 parent 50d4664 commit 8110caf

File tree

7 files changed

+48
-122
lines changed

7 files changed

+48
-122
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"@antv/data-set": "^0.11.8",
1919
"@antv/g2": "^4.2.10",
2020
"af-table-column": "^1.0.3",
21-
"appmesh": "^1.0.1",
21+
"appmesh": "^1.0.2",
2222
"axios": "^1.6.2",
2323
"element-ui": "^2.15.14",
2424
"js-base64": "^3.7.5",

src/layout/components/Navbar.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ export default {
129129
this.fullscreenLoading = true;
130130
131131
getClient().forwardingHost = this.forward;
132-
await getClient().authenticate(getClient().jwtToken);
132+
await getClient().authenticate();
133133
await this.$store.dispatch("settings/changeSetting", {
134134
key: "forwarding",
135135
value: this.forward

src/permission.js

Lines changed: 32 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import store from './store'
33
import { Message } from 'element-ui'
44
import NProgress from 'nprogress' // progress bar
55
import 'nprogress/nprogress.css' // progress bar style
6-
import { getToken } from '@/utils/auth' // get token from cookie
76
import getPageTitle from '@/utils/get-page-title'
87

98
NProgress.configure({ showSpinner: false }) // NProgress Configuration
@@ -18,72 +17,52 @@ router.beforeEach(async (to, from, next) => {
1817
// set page title
1918
document.title = getPageTitle(to.meta.title)
2019

21-
// determine whether the user has logged in
22-
const hasToken = getToken()
2320

24-
if (hasToken) {
25-
if (to.path === '/login') {
26-
// if is logged in, redirect to the home page
27-
next({ path: '/' })
28-
NProgress.done()
29-
} else {
30-
// TODO: When the browser is closed and reopened, the user permission info will be lost.
31-
// If the user navigates directly to another page without going through the login page,
32-
// the permissions need to be re-validated.
33-
const hasGetUserInfo = store.getters.user
34-
if (hasGetUserInfo) {
35-
if (to.meta && to.meta.roles && to.meta.roles.length > 0) {
36-
let curPermissions = to.meta.roles;
37-
let permissions = hasGetUserInfo.permissions;
38-
let hasPermission = false;
39-
if (permissions) {
40-
for (let i = 0; i < curPermissions.length; i++) {
41-
if (permissions.indexOf(curPermissions[i]) >= 0) {
42-
hasPermission = true;
43-
break;
44-
}
45-
}
46-
}
4721

48-
if (hasPermission) {
49-
next();
50-
} else {
51-
next('/401');
52-
NProgress.done();
53-
setTimeout(() => {
54-
store.dispatch("app/setLoading", false);
55-
}, 1000);
22+
23+
// TODO: When the browser is closed and reopened, the user permission info will be lost.
24+
// If the user navigates directly to another page without going through the login page,
25+
// the permissions need to be re-validated.
26+
const hasGetUserInfo = store.getters.user
27+
if (hasGetUserInfo) {
28+
if (to.meta && to.meta.roles && to.meta.roles.length > 0) {
29+
let curPermissions = to.meta.roles;
30+
let permissions = hasGetUserInfo.permissions;
31+
let hasPermission = false;
32+
if (permissions) {
33+
for (let i = 0; i < curPermissions.length; i++) {
34+
if (permissions.indexOf(curPermissions[i]) >= 0) {
35+
hasPermission = true;
36+
break;
5637
}
57-
} else {
58-
next();
5938
}
60-
} else {
61-
try {
62-
// get user info
63-
await store.dispatch('user/getInfo')
39+
}
6440

65-
next()
66-
} catch (error) {
67-
// remove token and go to login page to re-login
68-
await store.dispatch('user/resetToken')
69-
Message.error(error || 'Has Error')
70-
next(`/login?redirect=${to.path}`)
71-
NProgress.done()
72-
}
41+
if (hasPermission) {
42+
next();
43+
} else {
44+
next('/401');
45+
NProgress.done();
46+
setTimeout(() => {
47+
store.dispatch("app/setLoading", false);
48+
}, 1000);
7349
}
50+
} else {
51+
next();
7452
}
7553
} else {
76-
/* has no token*/
54+
try {
55+
// get user info
56+
await store.dispatch('user/getInfo')
7757

78-
if (whiteList.indexOf(to.path) !== -1) {
79-
// in the free login whitelist, go directly
8058
next()
81-
} else {
82-
// other pages that do not have permission to access are redirected to the login page.
59+
} catch (error) {
60+
Message.error(error || 'Has Error')
8361
next(`/login?redirect=${to.path}`)
8462
NProgress.done()
8563
}
8664
}
65+
8766
})
8867

8968
router.afterEach(() => {

src/store/modules/user.js

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
import { getToken, setToken, removeToken, setUser, getUser, removeUser } from '@/utils/auth'
1+
import { setUser, getUser, removeUser } from '@/utils/auth'
22
import { getClient } from '@/utils/appmeshClient'
33
import { resetRouter } from '@/router'
4-
import { Base64 } from 'js-base64'
54

65
let user = getUser();
76

87
const state = {
9-
token: getToken(),
108
name: user ? user.name : '',
119
account: user ? user.account : '',
1210
auth: user ? user.auth : '',
@@ -15,9 +13,6 @@ const state = {
1513
}
1614

1715
const mutations = {
18-
SET_TOKEN: (state, token) => {
19-
state.token = token
20-
},
2116
SET_NAME: (state, name) => {
2217
state.name = name
2318
},
@@ -40,9 +35,9 @@ const actions = {
4035
login({ commit }, userInfo) {
4136
const { UserName, Password, Audience } = userInfo
4237
return new Promise((resolve, reject) => {
43-
getClient().login(UserName, Password, null, 'P1D', Audience).then(token => {
38+
getClient().login(UserName, Password, null, 'P1D', Audience).then(() => {
4439
// Login success without TOTP
45-
actions.handleLoginSuccess({ commit, token, UserName, Password, resolve, reject })
40+
actions.handleLoginSuccess({ commit, UserName, Password, resolve, reject })
4641
}).catch(error => {
4742
reject(error)
4843
})
@@ -52,32 +47,23 @@ const actions = {
5247
// TOTP login
5348
validateTotp({ commit }, { username, challenge, totp, expireSeconds }) {
5449
return new Promise((resolve, reject) => {
55-
getClient().validate_totp(username, challenge, totp, expireSeconds).then(token => {
56-
actions.handleLoginSuccess({ commit, token, username, resolve, reject })
50+
getClient().validate_totp(username, challenge, totp, expireSeconds).then(() => {
51+
actions.handleLoginSuccess({ commit, username, resolve, reject })
5752
}).catch(error => {
5853
console.error('TOTP validation error:', error)
5954
reject(error)
6055
})
6156
})
6257
},
6358

64-
handleLoginSuccess({ commit, token, UserName, Password, resolve, reject }) {
65-
if (!token) {
66-
console.error('Login success handler failed: Invalid response', token)
67-
reject(new Error('Invalid login response'));
68-
return;
69-
}
70-
59+
handleLoginSuccess({ commit, UserName, Password, resolve, reject }) {
7160
const user = {
72-
token: token,
7361
name: UserName,
7462
account: UserName,
7563
auth: Password,
7664
avatar: "https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png"
7765
};
7866

79-
setToken(user.token);
80-
commit('SET_TOKEN', user.token);
8167
commit('SET_NAME', user.name);
8268
commit('SET_ACCOUNT', user.account);
8369
commit('SET_AUTH', user.auth);
@@ -101,14 +87,13 @@ const actions = {
10187
getInfo({ commit, state }) {
10288
return new Promise((resolve, reject) => {
10389
getClient().view_self().then(data => {
104-
10590
if (!data) {
10691
console.error('Get user info failed: Empty response')
10792
reject('Verification failed, please Login again.')
93+
return
10894
}
10995

11096
const { name, avatar } = data
111-
11297
commit('SET_NAME', name)
11398
commit('SET_AVATAR', avatar)
11499
resolve(data)
@@ -127,24 +112,13 @@ const actions = {
127112
}).catch((error) => {
128113
console.error('Failed to log off:', error)
129114
})
130-
commit('SET_TOKEN', '')
131115
commit('SET_NAME', '')
132116
commit('SET_ACCOUNT', '')
133117
commit('SET_AUTH', '')
134118
commit('SET_AVATAR', '')
135-
commit('SET_PERMISSIONS', ''); // 添加清除权限
136-
removeUser();
137-
removeToken();
138-
resetRouter();
139-
resolve();
140-
});
141-
},
142-
143-
// remove token
144-
resetToken({ commit }) {
145-
return new Promise(resolve => {
146-
commit('SET_TOKEN', '')
147-
removeToken()
119+
commit('SET_PERMISSIONS', '')
120+
removeUser()
121+
resetRouter()
148122
resolve()
149123
})
150124
}

src/utils/appmeshClient.js

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@ import { HttpStatus } from './constants'
55
import store from '@/store'
66
import router from '@/router'
77

8-
const INSTANCE_KEY = '__APP_MESH_CLIENT__';
98

109
/**
1110
* Vue-specific implementation of AppMeshClient with UI integration
1211
*/
1312
export class VueAppMeshClient extends AppMeshClient {
1413
constructor(options = {}) {
15-
super(options.baseURL, options.sslConfig, options.jwtToken);
14+
super(options.baseURL, options.sslConfig);
1615
}
1716

1817
/**
@@ -25,10 +24,6 @@ export class VueAppMeshClient extends AppMeshClient {
2524
// First check if error is a valid object with statusCode
2625
if (error && typeof error === 'object' && 'statusCode' in error) {
2726
if (error.statusCode === HttpStatus.UNAUTHORIZED) {
28-
// Clear token to avoid next token re-use
29-
this.jwtToken = null;
30-
removeToken();
31-
3227
// Logout user and redirect to login page
3328
store.dispatch('user/logout')
3429
.catch(logoutError => console.error('Logout error:', logoutError));
@@ -52,6 +47,8 @@ export class VueAppMeshClient extends AppMeshClient {
5247
}
5348
}
5449

50+
const INSTANCE_KEY = '__APP_MESH_CLIENT__';
51+
5552
/**
5653
* Get the AppMesh client instance
5754
* @param {Object} [data] - Optional configuration data
@@ -64,13 +61,9 @@ export function getClient(data = null) {
6461
}
6562

6663
const client = window[INSTANCE_KEY];
67-
const token = store.getters?.token;
6864
const forwardingHost = store.getters?.forwarding;
6965
const headers = data?.headers || {};
7066

71-
if (token && !('Authorization' in headers)) {
72-
client.jwtToken = getToken();
73-
}
7467
if (forwardingHost && !('X-Target-Host' in headers)) {
7568
client.forwardingHost = forwardingHost;
7669
}

src/utils/auth.js

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,3 @@
1-
import Cookies from 'js-cookie'
2-
import { getClient } from '@/utils/appmeshClient'
3-
4-
const TokenKey = 'vue_admin_template_token'
5-
6-
export function getToken() {
7-
return Cookies.get(TokenKey)
8-
}
9-
10-
export function setToken(token) {
11-
return Cookies.set(TokenKey, token)
12-
}
13-
14-
export function removeToken() {
15-
return Cookies.remove(TokenKey)
16-
}
17-
181
export function setUser(user) {
192
sessionStorage["user"] = JSON.stringify(user);
203
}
@@ -26,4 +9,3 @@ export function getUser() {
269
export function removeUser() {
2710
sessionStorage["user"] = null;
2811
}
29-

src/views/security/changePwd.vue

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454

5555
<script>
5656
import { getClient } from '@/utils/appmeshClient'
57-
import { setToken } from '@/utils/auth'
5857
import VueQrcode from 'qrcode.vue'
5958
6059
export default {
@@ -128,8 +127,7 @@ export default {
128127
}
129128
130129
try {
131-
const token = await getClient().setup_totp(this.totpCode);
132-
setToken(token);
130+
await getClient().setup_totp(this.totpCode);
133131
this.$message.success('MFA setup successfully');
134132
this.qrDialogVisible = false;
135133
this.qrCodeData = '';

0 commit comments

Comments
 (0)