jwt.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // ------------token相关-----------------
  2. import jwt from 'jsonwebtoken';
  3. import { promisify } from 'util';
  4. import resSend from '../util/resSend.js';
  5. import { tokenKey } from '../config/config.default.js';
  6. import { User, ZUser } from '../model/index.js';
  7. const toiwt: any = promisify(jwt.sign);
  8. const verify: any = promisify(jwt.verify);
  9. // 生成token
  10. export const getTokenFu = async (userInfo: any) => {
  11. return await toiwt(userInfo, tokenKey, {
  12. // token有效期10个小时
  13. expiresIn: 60 * 60 * 10,
  14. });
  15. };
  16. // 接口处理token中间件
  17. export const verifyToken = async (req: any, res: any, next: any) => {
  18. // 获取请求头里面的token
  19. let token = req.headers.token || '';
  20. if (!token) return resSend(res, 401, '请传入用户凭证');
  21. try {
  22. const decoded = await verify(token, tokenKey);
  23. const user = await User.findById(decoded._id);
  24. if (!user) return resSend(res, 401, '用户不存在或已被删除');
  25. // 用户信息存起来
  26. req.user = user;
  27. next();
  28. } catch (error) {
  29. return resSend(res, 401, '用户凭证无效');
  30. }
  31. };
  32. // 抽奖模块接口处理token中间件
  33. export const verifyToken2 = async (req: any, res: any, next: any) => {
  34. // 获取请求头里面的token
  35. let token = req.headers.token || '';
  36. if (!token) return resSend(res, 401, '请传入用户凭证');
  37. try {
  38. const decoded = await verify(token, tokenKey);
  39. const user = await ZUser.findById(decoded._id);
  40. if (!user) return resSend(res, 401, '用户不存在或已被删除');
  41. // 用户信息存起来
  42. req.user = user;
  43. next();
  44. } catch (error) {
  45. return resSend(res, 401, '用户凭证无效');
  46. }
  47. };