BindEmail.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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.status(401).json({
  24. ...BaseStdResponse.ACCESS_DENIED
  25. })
  26. const VerifyCode = await Redis.get(`email:${email}`);
  27. if (!VerifyCode || VerifyCode != code)
  28. return res.json({
  29. ...BaseStdResponse.SMS_CHECK_FAIL,
  30. msg: '邮箱验证码输入错误或已过期'
  31. })
  32. let sql = 'SELECT email FROM users WHERE email = ?';
  33. let EmailRows = await db.query(sql, [email]);
  34. if (EmailRows.length > 0)
  35. return res.json({
  36. ...BaseStdResponse.USER_ALREADY_EXISTS,
  37. msg: '该邮箱已被注册!'
  38. })
  39. sql = 'UPDATE users SET email = ? WHERE uuid = ?';
  40. let result = await db.query(sql, [email, uuid]);
  41. if (result && result.affectedRows > 0) {
  42. // 注册成功后删除邮箱对应的验证码 避免注册失败后重复获取
  43. await Redis.del(`email:${email}`);
  44. res.json({
  45. ...BaseStdResponse.OK
  46. });
  47. await sendEmail(email, '换绑邮箱成功', `您的GitNexus账号换绑邮箱成功,操作时间:${new Date().toLocaleString()}`);
  48. } else {
  49. res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '操作失败!' });
  50. }
  51. }
  52. }
  53. module.exports.BindEmail = BindEmail;