WXWorkLogin.js 2.4 KB

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