const JsonWebToken = require('jsonwebtoken') const crypto = require('crypto') const my = {} // 不要在这里 `my = { envar: wo?.envar || globalThis.envar || {} }`,危险!其他类里如提前引用,可能导致 my.envar 一直是空的 module.exports = { initMy (envar) { my.envar = envar }, createToken (content, key = my.envar?.tokenKey || wo?.envar?.tokenKey) { if (!key) { console.warn({ _at: new Date().toJSON(), about: '*** tokenkey is empty! ***' }) } // content 可以是数字,非空字符串或非空对象,不可以是数组。 // key 可以未定义,则默认设为空字符串,再转化为哈希。(jsonwebtoken 要求 key 必须有值) try { return JsonWebToken.sign( content, crypto .createHash('sha256') .update(key || '', 'utf8') .digest('hex') ) } catch (exp) { return null } }, verifyToken (token, key = my.envar?.tokenKey || wo?.envar?.tokenKey) { if (!key) { console.warn({ _at: new Date().toJSON(), about: '*** tokenkey is empty! ***' }) } if (!token) { return null } try { return JsonWebToken.verify( token, crypto .createHash('sha256') .update(key || '', 'utf8') .digest('hex') ) } catch (exp) { return null } }, }