Commit 93caf4dd authored by 郑磊's avatar 郑磊

增加获取token的方法

parent 4d7013b3
......@@ -10,6 +10,7 @@
"devDependencies": {
"@types/crypto-js": "^4.2.2",
"@types/jest": "^29.5.12",
"@types/js-cookie": "^3.0.6",
"@types/lodash-es": "^4.17.12",
"axios": "^1.6.5",
"jest": "^29.7.0",
......@@ -21,6 +22,7 @@
},
"dependencies": {
"crypto-js": "^4.2.0",
"js-cookie": "^3.0.5",
"lodash-es": "^4.17.21"
}
}
export * from './api'
export * from './utils'
export * from './app'
export * from './token'
import CryptoJS from 'crypto-js'
import Cookies from 'js-cookie'
/**
* token数据
*/
export interface TokenData {
/**
* token的来源
*/
source: 'hash_raw' | 'hash_encoded' | 'url_raw' | 'url_encoded' | 'cookie_app' | 'cookie'
/**
* token值
*/
token: string
}
/**
* 解码token使用的key
*/
const key = CryptoJS.enc.Utf8.parse('cqfjkjgs')
/**
* 解码token
*/
function decodeToken(token: string) {
return CryptoJS.AES.decrypt(token, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
}).toString(CryptoJS.enc.Utf8)
}
/**
* 尝试解析token,按以下顺序解析
* 1.地址上的加密token
* 2.地址上的明文token
* 3.cookie里的app_token
* 4.cookie里的token
*/
export function parseToken(): TokenData | undefined {
const url = new URL(location.href)
if (url.hash && url.hash.includes('?')) {
const hashParams = new URLSearchParams(url.hash.substring(url.hash.indexOf('?') + 1))
//hash上有token
if (hashParams.has('token')) {
const token = hashParams.get('token')
if (token) {
//先尝试解码,如果失败则使用明文
try {
return {
token: decodeToken(token),
source: 'hash_encoded',
}
} catch (e: unknown) {
return {
token: decodeToken(token),
source: 'hash_raw',
}
}
}
}
}
//然后尝试从url上获取token
if (url.searchParams.has('token')) {
const token = url.searchParams.get('token')
if (token) {
//先尝试解码,如果失败则使用明文
try {
return {
token: decodeToken(token),
source: 'url_encoded',
}
} catch (e: unknown) {
return {
token: decodeToken(token),
source: 'url_raw',
}
}
}
}
//接着尝试从cookie中获取app_token
const appToken = Cookies.get('app_token')
if (appToken) {
return {
token: appToken,
source: 'cookie_app',
}
}
//再尝试从cookie中获取token
const token = Cookies.get('token')
if (token) {
return {
token,
source: 'cookie',
}
}
}
......@@ -629,6 +629,11 @@
expect "^29.0.0"
pretty-format "^29.0.0"
"@types/js-cookie@^3.0.6":
version "3.0.6"
resolved "https://registry.npmmirror.com/@types/js-cookie/-/js-cookie-3.0.6.tgz#a04ca19e877687bd449f5ad37d33b104b71fdf95"
integrity sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==
"@types/lodash-es@^4.17.12":
version "4.17.12"
resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b"
......@@ -1677,6 +1682,11 @@ jest@^29.7.0:
import-local "^3.0.2"
jest-cli "^29.7.0"
js-cookie@^3.0.5:
version "3.0.5"
resolved "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc"
integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==
js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment