WXWorkLogin.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. let id, result, uuid, username, avatar, email;
  31. if (rows.length > 0) {
  32. ({ id, uuid, username, avatar, email } = rows[0]);
  33. avatar = avatar && avatar != '' ? avatar : 'https://vthc.cn/img/avatar.png';
  34. const updateQuery = 'UPDATE users SET session = ? WHERE wxid = ?';
  35. result = await db.query(updateQuery, [session, id]);
  36. } else {
  37. return res.json({
  38. ...BaseStdResponse.USER_NOT_EXISTS
  39. })
  40. }
  41. if (result && result.affectedRows > 0) {
  42. return res.json({
  43. ...BaseStdResponse.OK,
  44. data: {
  45. uuid,
  46. username,
  47. wxid,
  48. email,
  49. avatar,
  50. session
  51. }
  52. });
  53. } else {
  54. return res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '登录失败!' });
  55. }
  56. } catch (error) {
  57. this.logger.error(`企业微信登录失败!${error.stack}`)
  58. return res.json({ ...BaseStdResponse.ERR, endpoint: 7894379, msg: '登录失败!' });
  59. }
  60. }
  61. }
  62. module.exports.WXWorkLogin = WXWorkLogin;