userToken.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const express = require("express");
  2. const router = express.Router();
  3. const crypto = require("crypto");
  4. const { executeQuery } = require("../config/database");
  5. // 登录接口:校验用户名密码,返回/生成 token
  6. router.post("/login", async (req, res) => {
  7. try {
  8. const { name, password } = req.body;
  9. if (!name || !password) {
  10. return res.status(400).json({ success: false, error: "Missing name or password" });
  11. }
  12. const sql = `
  13. SELECT id, status, name, is_admin, password, token, create_time
  14. FROM user_info
  15. WHERE name = ? AND password = ?
  16. LIMIT 1
  17. `;
  18. const rows = await executeQuery(sql, [name, password]);
  19. if (!rows || rows.length === 0) {
  20. return res.status(401).json({ success: false, error: "账号不存在" });
  21. }
  22. const user = rows[0];
  23. // 如果没有 token 或 token 为空,则生成新的 token 并更新到数据库
  24. let token = user.token;
  25. if (!token) {
  26. token = crypto.randomBytes(32).toString("hex");
  27. const updateSql = `
  28. UPDATE user_info
  29. SET token = ?, status = 'enable'
  30. WHERE id = ?
  31. `;
  32. await executeQuery(updateSql, [token, user.id]);
  33. }
  34. return res.json({
  35. success: true,
  36. message: "登录成功",
  37. data: {
  38. id: user.id,
  39. name: user.name,
  40. is_admin: user.is_admin || 0,
  41. status: user.status || null,
  42. token,
  43. },
  44. });
  45. } catch (error) {
  46. console.error("Login error:", error);
  47. return res.status(500).json({ success: false, error: "Internal server error" });
  48. }
  49. });
  50. module.exports = router;