tokenAuth.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // 检查用户会话
  2. let jwt = require('jsonwebtoken'); //用来创建和确认用户信息摘要
  3. let Util = require('../util/util');//用来返回抽取的
  4. let logger = require('../util/log4js').logger('tokenAuth');
  5. let jwtSecret = 'kkk'; // token secret
  6. module.exports = {
  7. setToken: function(userInfo){
  8. let token = jwt.sign({userInfo: userInfo}, jwtSecret , {
  9. expiresIn: '7d',
  10. });
  11. return token;
  12. },
  13. auth: function(req, res, next) {
  14. //检查cookie或者post的信息或者url查询参数或者头信息
  15. let token = req.cookies.token || req.body.token || req.query.token || req.headers['x-access-token'] ;
  16. let username = req.cookies.username || req.body.username || req.query.username ;
  17. // 解析 token
  18. if (token) {
  19. // 确认token
  20. jwt.verify(token, jwtSecret, function(err, decoded) {
  21. if (err || decoded.userInfo.username != username) {
  22. logger.info('TOKEN AUTH ERROR:', err)
  23. res.status(203);
  24. Util.resHandler(res, {
  25. isSuccess: false,
  26. msg: "TOKEN AUTH ERROR"
  27. });
  28. } else {
  29. // 如果没问题就把解码后的信息保存到请求中,供后面的路由使用
  30. let userInfo = decoded.userInfo;
  31. req._userInfo = userInfo;
  32. // 检测权限是否有修改
  33. // todo...
  34. next();
  35. }
  36. });
  37. } else {
  38. // 如果没有token,则返回错误
  39. logger.info('no token')
  40. res.status(203);
  41. Util.resHandler(res, {
  42. isSuccess: false,
  43. msg: "登录失效"
  44. });
  45. }
  46. },
  47. }