zhiputoken.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. const jsonwebtoken = require("jsonwebtoken")
  2. const API_TOKEN_TTL_SECONDS = 3 * 60
  3. const CACHE_TTL_SECONDS = API_TOKEN_TTL_SECONDS - 30
  4. const tokenCache = {}
  5. const generateToken = (apiSecretKey, cache = true) => {
  6. try {
  7. if (tokenCache[apiSecretKey] && Date.now() - tokenCache[apiSecretKey].createAt < (CACHE_TTL_SECONDS * 1000)) {
  8. return tokenCache[apiSecretKey].token
  9. }
  10. const [apiKey, secret] = apiSecretKey.split(".")
  11. const payload = {
  12. "api_key": apiKey,
  13. "exp": Math.round(Date.now() * 1000) + API_TOKEN_TTL_SECONDS * 1000,
  14. "timestamp": Math.round(Date.now() * 1000),
  15. }
  16. // algorithm = "HS256", headers = { "alg": "HS256", "sign_type": "SIGN" }
  17. //@ts-ignore 不用管
  18. const ret = jsonwebtoken.sign(payload, secret, {
  19. algorithm: "HS256",
  20. header: { alg: "HS256", sign_type: "SIGN" }
  21. })
  22. if (cache) {
  23. tokenCache[apiSecretKey] = {
  24. token: ret,
  25. createAt: Date.now()
  26. }
  27. }
  28. return ret
  29. } catch (e) {
  30. throw "invalid api_key"
  31. }
  32. }
  33. module.exports = {
  34. generateToken
  35. }