import { createHmac } from 'crypto'; /** * hmac加密用户绑定token * @param str */ export function encryptionUserToken(id: number, randomCode: string, time?: number): string { let now: string; if (!time) { const timestamp: number = Date.now(); now = Math.round(timestamp / 1000 / 30).toString(); } else { now = time.toString(); } const originalToken = createHmac('sha256', now) .update(id + randomCode) .digest('hex'); const token = originalToken.toUpperCase().substr(parseInt(now.charAt(now.length - 3), 10), 4); return token; } /** * 验证用户绑定token是否合法 * @param id 用户id * @param randomCode 随机码 * @param token 验证的token */ export async function verifyUserToken(id: number, randomCode: string, token: string): Promise { const time = Math.round(Date.now() / 1000 / 30); if ( token === encryptionUserToken(id, randomCode, time) || token === encryptionUserToken(id, randomCode, time - 1) ) { return true; } else { return false; } }