✨ add api validation signature
This commit is contained in:
@@ -10,6 +10,7 @@ import {message, Modal} from "ant-design-vue";
|
||||
import i18n from "@/locales";
|
||||
import {axiosRequestAdapter} from "@alova/adapter-axios";
|
||||
import {refreshToken} from "@/api/user";
|
||||
import createMD5Signature, {generateNonce} from "@/utils/signature/signature.ts";
|
||||
|
||||
let hasShownNetworkError: boolean = false;
|
||||
const {onAuthRequired, onResponseRefreshToken} = createServerTokenAuthentication<typeof VueHook,
|
||||
@@ -59,6 +60,15 @@ export const service = createAlova({
|
||||
}
|
||||
const lang = useStore().lang;
|
||||
method.config.headers['Accept-Language'] = lang.lang || 'zh';
|
||||
// 添加签名
|
||||
if (method.type === 'POST') {
|
||||
const nonce: string = generateNonce(); // 生成随机的 Nonce
|
||||
const {signature, timestamp}: { signature: string, timestamp: number } = createMD5Signature(method, nonce);
|
||||
method.config.headers['X-Sign'] = signature;
|
||||
method.config.headers['X-Timestamp'] = timestamp;
|
||||
method.config.headers['X-Nonce'] = nonce;
|
||||
}
|
||||
|
||||
}),
|
||||
// 响应拦截器
|
||||
responded: onResponseRefreshToken({
|
||||
|
33
src/utils/signature/signature.ts
Normal file
33
src/utils/signature/signature.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import CryptoJS from 'crypto-js';
|
||||
|
||||
/**
|
||||
* 生成 MD5 签名
|
||||
* @param method
|
||||
* @param nonce
|
||||
*/
|
||||
export default function createMD5Signature(method: any, nonce: string) {
|
||||
const secretKey: string = "38h0ex04du8qqf9ar2knn1quicdsm4s0"; // 密钥
|
||||
const timestamp: number = Date.now(); // 获取当前时间戳
|
||||
const payload: string = JSON.stringify(method.data || {}); // 获取请求数据
|
||||
|
||||
// 创建待签名字符串
|
||||
const baseString: string = `${method.type}:${payload}:${timestamp}:${nonce}:${secretKey}`;
|
||||
|
||||
// 生成 MD5 签名
|
||||
const signature: string = CryptoJS.MD5(baseString).toString();
|
||||
|
||||
// 你可以根据需要返回包含时间戳的签名对象
|
||||
return {
|
||||
signature,
|
||||
timestamp,
|
||||
nonce
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成随机字符串作为 nonce
|
||||
*/
|
||||
export function generateNonce() {
|
||||
return Math.random().toString(36).substring(2, 16); // 生成16位随机字符串
|
||||
}
|
||||
|
Reference in New Issue
Block a user