BindEmail.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. const API = require("../../../lib/API");
  2. const db = require("../../../plugin/DataBase/db");
  3. const { BaseStdResponse } = require("../../../BaseStdResponse");
  4. const Redis = require('../../../plugin/DataBase/Redis');
  5. const sendEmail = require('../../../plugin/Email/Email');
  6. const AccessControl = require("../../../lib/AccessControl");
  7. class BindEmail extends API {
  8. constructor() {
  9. super();
  10. this.setMethod("POST");
  11. this.setPath("/User/BindEmail");
  12. }
  13. async onRequest(req, res) {
  14. let { uuid, session, email, code } = req.body;
  15. if ([uuid, session, email, code].some(value => value === '' || value === null || value === undefined)) {
  16. return res.json({
  17. ...BaseStdResponse.MISSING_PARAMETER,
  18. endpoint: 1513126
  19. });
  20. }
  21. // 检查 session 是否有效
  22. if (!await AccessControl.checkSession(uuid, session)) {
  23. return res.json({
  24. ...BaseStdResponse.ACCESS_DENIED,
  25. endpoint: 48153145
  26. });
  27. }
  28. const VerifyCode = await Redis.get(`email:${email}`);
  29. if (!VerifyCode || VerifyCode != code)
  30. return res.json({
  31. ...BaseStdResponse.SMS_CHECK_FAIL,
  32. msg: '邮箱验证码输入错误或已过期'
  33. })
  34. let sql = 'SELECT email FROM users WHERE email = ?';
  35. let EmailRows = await db.query(sql, [email]);
  36. if (EmailRows.length > 0)
  37. return res.json({
  38. ...BaseStdResponse.USER_ALREADY_EXISTS,
  39. msg: '该邮箱已被注册!'
  40. })
  41. sql = 'UPDATE users SET email = ? WHERE uuid = ?';
  42. let result = await db.query(sql, [email, uuid]);
  43. if (result && result.affectedRows > 0) {
  44. // 注册成功后删除邮箱对应的验证码 避免注册失败后重复获取
  45. await Redis.del(`email:${email}`);
  46. sql = 'SELECT username, wxid, avatar FROM users WHERE uuid = ?';
  47. let rows = await db.query(sql, [uuid]);
  48. if(!rows || rows.length === 0)
  49. return res.json({
  50. ...BaseStdResponse.DATABASE_ERR
  51. })
  52. res.json({
  53. ...BaseStdResponse.OK,
  54. data: {
  55. uuid,
  56. username: rows[0].username,
  57. wxid: rows[0].wxid,
  58. email,
  59. avatar: rows[0].avatar,
  60. session
  61. }
  62. });
  63. await sendEmail(email, '换绑邮箱成功', `您的Double_X考勤账号换绑邮箱成功,操作时间:${new Date().toLocaleString()}`);
  64. } else {
  65. res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '操作失败!' });
  66. }
  67. }
  68. }
  69. module.exports.BindEmail = BindEmail;