WXWorkLogin.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 {
  6. getUserInfo,
  7. getUserID
  8. } = require("../../plugin/WXWork/GetInfo");
  9. class WXWorkLogin extends API {
  10. constructor() {
  11. super();
  12. this.setMethod("POST");
  13. this.setPath("/User/WXWorkLogin");
  14. }
  15. createSession(uuid, salt) {
  16. return md5(`${uuid}${salt}${new Date().getTime()}`);
  17. }
  18. async onRequest(req, res) {
  19. this.setAllowCORS(res);
  20. const { code } = req.body;
  21. if (!code) {
  22. res.json({ ...BaseStdResponse.MISSING_PARAMETER, endpoint: 7841686 });
  23. return;
  24. }
  25. try {
  26. const idRes = await getUserID(code);
  27. if (!idRes || !idRes.success) {
  28. return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: `登录失败!${idRes.msg}` });
  29. }
  30. const wxid = idRes.userid;
  31. const session = this.createSession(wxid, Math.random().toFixed(6).slice(-6));
  32. let sql = 'SELECT uuid, username, avatar FROM users WHERE wxid = ?';
  33. let [rows] = await db.query(sql, [wxid]);
  34. let result, uuid, username, avatar;
  35. if (rows.length > 0) {
  36. // 用户存在,更新 session
  37. ({ uuid, username, avatar } = rows[0]);
  38. const updateQuery = 'UPDATE users SET session = ? WHERE wxid = ?';
  39. result = await db.query(updateQuery, [session, wxid]);
  40. } else {
  41. // 用户不存在,注册用户
  42. const infoRes = await getUserInfo(wxid);
  43. if (!infoRes || !infoRes.success) {
  44. return res.json({ ...BaseStdResponse.ERR, endpoint: 7894198, msg: `登录失败!${infoRes.msg}` });
  45. }
  46. ({ name: username, avatar } = infoRes);
  47. uuid = md5(Date.now() + wxid + code);
  48. const insertQuery = 'INSERT INTO users (uuid, username, wxid, avatar, session) VALUES (?, ?, ?, ?, ?)';
  49. result = await db.query(insertQuery, [uuid, username, wxid, avatar, session]);
  50. }
  51. if (result && result.affectedRows > 0) {
  52. return res.json({
  53. ...BaseStdResponse.OK,
  54. data: {
  55. uuid,
  56. username,
  57. wxid,
  58. avatar,
  59. session
  60. }
  61. });
  62. } else {
  63. return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: '登录失败!' });
  64. }
  65. } catch (error) {
  66. return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: '登录失败!' });
  67. }
  68. }
  69. }
  70. module.exports.WXWorkLogin = WXWorkLogin;