Compare commits
No commits in common. "fb2d3d80ce2989a3cdd9760f0584dd9e22348f0c" and "44afae176a6e1ffbea8be670702ffc395b2f1ef0" have entirely different histories.
fb2d3d80ce
...
44afae176a
|
@ -1,83 +0,0 @@
|
||||||
/**
|
|
||||||
* JWT解析工具
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 解析JWT令牌
|
|
||||||
* @param {string} token JWT令牌
|
|
||||||
* @returns {Object} 解析后的用户信息
|
|
||||||
*/
|
|
||||||
export function parseJWT(token) {
|
|
||||||
try {
|
|
||||||
// 将JWT分割为三部分
|
|
||||||
const parts = token.split('.');
|
|
||||||
if (parts.length !== 3) {
|
|
||||||
throw new Error('无效的JWT格式');
|
|
||||||
}
|
|
||||||
|
|
||||||
// 解码载荷部分(第二部分)
|
|
||||||
const payload = parts[1];
|
|
||||||
const decodedPayload = decodeBase64URL(payload);
|
|
||||||
const payloadObj = JSON.parse(decodedPayload);
|
|
||||||
|
|
||||||
// 如果存在UserInfo字段,解析它
|
|
||||||
if (payloadObj.UserInfo) {
|
|
||||||
try {
|
|
||||||
payloadObj.UserInfo = JSON.parse(payloadObj.UserInfo);
|
|
||||||
} catch (e) {
|
|
||||||
console.error('解析UserInfo失败:', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return payloadObj;
|
|
||||||
} catch (error) {
|
|
||||||
console.error('JWT解析失败:', error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 解码Base64URL编码的字符串
|
|
||||||
* @param {string} base64Url Base64URL编码的字符串
|
|
||||||
* @returns {string} 解码后的字符串
|
|
||||||
*/
|
|
||||||
function decodeBase64URL(base64Url) {
|
|
||||||
// 将Base64URL转换为标准Base64
|
|
||||||
const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
|
|
||||||
|
|
||||||
// 添加填充字符
|
|
||||||
const padding = '='.repeat((4 - base64.length % 4) % 4);
|
|
||||||
const base64Padded = base64 + padding;
|
|
||||||
|
|
||||||
// 解码Base64
|
|
||||||
try {
|
|
||||||
// 浏览器环境
|
|
||||||
return decodeURIComponent(
|
|
||||||
atob(base64Padded)
|
|
||||||
.split('')
|
|
||||||
.map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
|
|
||||||
.join('')
|
|
||||||
);
|
|
||||||
} catch (e) {
|
|
||||||
// Node.js环境或其他环境
|
|
||||||
try {
|
|
||||||
return Buffer.from(base64Padded, 'base64').toString('utf-8');
|
|
||||||
} catch (e2) {
|
|
||||||
console.error('Base64解码失败:', e2);
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 从JWT中获取用户信息
|
|
||||||
* @param {string} token JWT令牌
|
|
||||||
* @returns {Object} 用户信息对象
|
|
||||||
*/
|
|
||||||
export function getUserInfoFromJWT(token) {
|
|
||||||
const parsedToken = parseJWT(token);
|
|
||||||
if (!parsedToken || !parsedToken.UserInfo) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return parsedToken.UserInfo;
|
|
||||||
}
|
|
Loading…
Reference in New Issue