token.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const jwt = require('jsonwebtoken');
  2. const secret = 'SLDLKKDS323ssdd@#@@gf';
  3. module.exports = class extends think.Service {
  4. /**
  5. * 根据header中的X-Nideshop-Token值获取用户id
  6. */
  7. async getUserId() {
  8. const token = think.token;
  9. if (!token) {
  10. return 0;
  11. }
  12. const result = await this.parse();
  13. if (think.isEmpty(result) || result.user_id <= 0) {
  14. return 0;
  15. }
  16. return result.user_id;
  17. }
  18. /**
  19. * 根据值获取用户信息
  20. */
  21. async getUserInfo() {
  22. const userId = await this.getUserId();
  23. if (userId <= 0) {
  24. return null;
  25. }
  26. const userInfo = await this.model('user').field(['id', 'username', 'nickname', 'gender', 'avatar', 'birthday']).where({ id: userId }).find();
  27. return think.isEmpty(userInfo) ? null : userInfo;
  28. }
  29. async create(userInfo) {
  30. const token = jwt.sign(userInfo, secret);
  31. return token;
  32. }
  33. async parse() {
  34. if (think.token) {
  35. try {
  36. return jwt.verify(think.token, secret);
  37. } catch (err) {
  38. return null;
  39. }
  40. }
  41. return null;
  42. }
  43. async verify() {
  44. const result = await this.parse();
  45. if (think.isEmpty(result)) {
  46. return false;
  47. }
  48. return true;
  49. }
  50. };