Postman生成哈希报错TypeError: crypto.createHash is not a function
问题根因
你脚本报TypeError的核心原因有三个:
- 你混用了Node.js原生
crypto模块和crypto-js库的API:你写的createHash()链式调用update()、digest()是Node原生crypto的专属写法,crypto-js根本没有这些方法,调用自然报错 - 你自己写的测试脚本里存在变量名错误:定义的邮箱变量是
email,哈希拼接时误写为emailAddress,就算API写对了也会触发未定义错误 - 你尝试的
createHmac写法是用于生成带密钥的HMAC摘要,和原TS代码里的普通SHA256哈希逻辑完全不匹配,就算API调用正确,生成的结果也不符合预期。
正确Postman前置脚本
Postman沙箱环境默认内置了crypto-js,不需要额外手动引入,直接用全局CryptoJS对象即可,下面的代码和你给出的TS逻辑1:1对齐:
const createTestingUserHash = (emailAddress, timestamp, salt) => { const rawContent = `testinguserhash::${emailAddress}::${timestamp}::${salt}`; const sha256Hash = CryptoJS.SHA256(rawContent); // 输出base64格式摘要 return sha256Hash.toString(CryptoJS.enc.Base64); }; const getLoginHash = () => { // 对齐原TS逻辑,取当前ISO格式时间戳 const currentTimeStamp = new Date().toISOString(); // 替换为你实际使用的测试用户salt,建议存在Postman环境变量里统一管理 const testingUserSalt = pm.environment.get("testingUserSalt") || "你的实际salt值"; // 替换为实际测试账号邮箱,也可以从环境变量读取 const testEmail = pm.environment.get("testUserEmail") || "testing@test.io"; return createTestingUserHash(testEmail, currentTimeStamp, testingUserSalt); }; const testingHash = getLoginHash(); console.log("生成的测试用户哈希值:", testingHash); // 如果后续请求需要用到这个哈希,直接存到环境变量即可 pm.environment.set("testingUserHash", testingHash);
验证方法
如果需要确认哈希结果和原TS代码完全一致,可以把三个入参都换成固定值:
- timestamp:
2022-06-23T14:51:34.694Z - salt:
salt_value - email:
testing@test.io
两边生成的base64字符串完全相同,就说明逻辑正确。
内容的提问来源于stack exchange,提问作者Afsal
相关产品推荐
相关产品推荐

