WXWorkLogin.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. const md5 = require("md5");
  2. const API = require("../../../lib/API");
  3. const { BaseStdResponse } = require("../../../BaseStdResponse");
  4. const db = require("../../../plugin/DataBase/db");
  5. const { getUserID } = require("../../../plugin/WXWork/GetInfo");
  6. class WXWorkLogin extends API {
  7. constructor() {
  8. super();
  9. this.setMethod("POST");
  10. this.setPath("/User/WXWorkLogin");
  11. }
  12. createSession(uuid, salt) {
  13. return md5(`${uuid}${salt}${new Date().getTime()}`);
  14. }
  15. async onRequest(req, res) {
  16. const { code } = req.body;
  17. if (!code) {
  18. res.json({ ...BaseStdResponse.MISSING_PARAMETER, endpoint: 7841686 });
  19. return;
  20. }
  21. try {
  22. const idRes = await getUserID(code);
  23. if (!idRes || !idRes.success) {
  24. return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: `获取企微信息失败!${idRes.msg}` });
  25. }
  26. const wxid = idRes.userid;
  27. const session = this.createSession(wxid, Math.random().toFixed(6).slice(-6));
  28. let sql = 'SELECT id, uuid, username, avatar, email FROM users WHERE wxid = ?';
  29. let rows = await db.query(sql, [wxid]);
  30. if (!rows || rows.length === 0)
  31. return res.json({
  32. ...BaseStdResponse.USER_NOT_EXISTS
  33. })
  34. let { id, uuid, username, avatar, email } = rows[0];
  35. const updateQuery = 'UPDATE users SET session = ? WHERE id = ?';
  36. const result = await db.query(updateQuery, [session, id]);
  37. if (result && result.affectedRows > 0) {
  38. return res.json({
  39. ...BaseStdResponse.OK,
  40. data: {
  41. uuid,
  42. username,
  43. wxid,
  44. email,
  45. avatar,
  46. session
  47. }
  48. });
  49. } else {
  50. return res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '登录失败!' });
  51. }
  52. } catch (error) {
  53. this.logger.error(`企业微信登录失败!${error.stack}`)
  54. return res.json({ ...BaseStdResponse.ERR, endpoint: 7894379, msg: '登录失败!' });
  55. }
  56. }
  57. }
  58. module.exports.WXWorkLogin = WXWorkLogin;