Login.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. const { v4: uuidv4 } = require('uuid');
  2. const API = require("../../lib/API");
  3. const bcryptjs = require('bcryptjs');
  4. const { BaseStdResponse } = require("../../BaseStdResponse");
  5. const db = require("../../plugin/DataBase/db");
  6. const Redis = require('../../plugin/DataBase/Redis');
  7. // 用户登录
  8. class Login extends API {
  9. constructor() {
  10. super();
  11. this.setMethod("POST");
  12. this.setPath("/User/Login");
  13. }
  14. async onRequest(req, res) {
  15. let { username, password, captcha, id } = req.body;
  16. if ([username, password, captcha, id].some(value => value === '' || value === null || value === undefined)) {
  17. res.json({
  18. ...BaseStdResponse.MISSING_PARAMETER,
  19. endpoint: 1513126
  20. });
  21. return;
  22. }
  23. password = atob(password);
  24. try {
  25. const code = await Redis.get(`captcha:${id}`);
  26. if (!code || code != captcha.toLowerCase())
  27. return res.json({
  28. ...BaseStdResponse.ERR,
  29. msg: '验证码错误或已过期!'
  30. })
  31. Redis.del(`captcha:${id}`);
  32. } catch (err) {
  33. this.logger.error(`验证图片验证码失败!${err.stack}`);
  34. return res.json({
  35. ...BaseStdResponse.DATABASE_ERR,
  36. msg: '验证失败!'
  37. })
  38. }
  39. let sql = 'SELECT id, uuid, password, username, permission, avatar, email FROM users WHERE username = ?';
  40. let rows = await db.query(sql, [username]);
  41. if (!rows || rows.length !== 1 || !bcryptjs.compareSync(password, rows[0].password))
  42. return res.json({
  43. ...BaseStdResponse.ERR,
  44. msg: '用户名或密码错误'
  45. })
  46. const session = uuidv4();
  47. sql = 'UPDATE users SET session = ? WHERE id = ?';
  48. let result = await db.query(sql, [session, rows[0].id]);
  49. if (result && result.affectedRows > 0) {
  50. res.json({
  51. ...BaseStdResponse.OK,
  52. data: {
  53. uuid: rows[0].uuid,
  54. username: rows[0].username,
  55. session,
  56. avatar: rows[0].avatar,
  57. email: rows[0].email,
  58. roles: rows[0].permission || []
  59. }
  60. });
  61. } else {
  62. res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '登录失败!' });
  63. }
  64. }
  65. }
  66. module.exports.Login = Login;