49 lines
1.4 KiB
JavaScript
49 lines
1.4 KiB
JavaScript
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! ***' }, '\n,')
|
|
}
|
|
// 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! ***' }, '\n,')
|
|
}
|
|
if (!token) {
|
|
return null
|
|
}
|
|
try {
|
|
return JsonWebToken.verify(
|
|
token,
|
|
crypto
|
|
.createHash('sha256')
|
|
.update(key || '', 'utf8')
|
|
.digest('hex')
|
|
)
|
|
} catch (exp) {
|
|
return null
|
|
}
|
|
},
|
|
}
|