auth.controller.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. "use strict";
  2. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  3. if (k2 === undefined) k2 = k;
  4. var desc = Object.getOwnPropertyDescriptor(m, k);
  5. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  6. desc = { enumerable: true, get: function() { return m[k]; } };
  7. }
  8. Object.defineProperty(o, k2, desc);
  9. }) : (function(o, m, k, k2) {
  10. if (k2 === undefined) k2 = k;
  11. o[k2] = m[k];
  12. }));
  13. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  14. Object.defineProperty(o, "default", { enumerable: true, value: v });
  15. }) : function(o, v) {
  16. o["default"] = v;
  17. });
  18. var __importStar = (this && this.__importStar) || (function () {
  19. var ownKeys = function(o) {
  20. ownKeys = Object.getOwnPropertyNames || function (o) {
  21. var ar = [];
  22. for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
  23. return ar;
  24. };
  25. return ownKeys(o);
  26. };
  27. return function (mod) {
  28. if (mod && mod.__esModule) return mod;
  29. var result = {};
  30. if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
  31. __setModuleDefault(result, mod);
  32. return result;
  33. };
  34. })();
  35. var __importDefault = (this && this.__importDefault) || function (mod) {
  36. return (mod && mod.__esModule) ? mod : { "default": mod };
  37. };
  38. Object.defineProperty(exports, "__esModule", { value: true });
  39. const router_1 = __importDefault(require("@koa/router"));
  40. const AuthService = __importStar(require("./auth.service"));
  41. const errorHandler_1 = require("../../middleware/errorHandler");
  42. const auth_1 = require("../../middleware/auth");
  43. const models_1 = require("../../models");
  44. const router = new router_1.default();
  45. // 发送验证码
  46. router.post('/send-code', async (ctx) => {
  47. const { phone } = ctx.request.body;
  48. if (!phone || !/^1[3-9]\d{9}$/.test(phone)) {
  49. throw new errorHandler_1.BadRequestError('请输入正确的手机号');
  50. }
  51. const code = AuthService.generateSmsCode(phone);
  52. // 开发环境直接返回验证码
  53. ctx.body = {
  54. code: 0,
  55. message: '验证码发送成功',
  56. data: {
  57. phone,
  58. // 总是返回验证码(方便测试)
  59. code,
  60. },
  61. };
  62. });
  63. // 手机号登录
  64. router.post('/login', async (ctx) => {
  65. const { phone, code } = ctx.request.body;
  66. if (!phone || !/^1[3-9]\d{9}$/.test(phone)) {
  67. throw new errorHandler_1.BadRequestError('请输入正确的手机号');
  68. }
  69. // 开发环境免密登录:code为空或"123456"时直接登录
  70. const isDev = process.env.NODE_ENV === 'development';
  71. if (!isDev && (!code || !/^\d{4,6}$/.test(code))) {
  72. throw new errorHandler_1.BadRequestError('请输入正确的验证码');
  73. }
  74. const result = await AuthService.loginWithPhone(phone, code);
  75. ctx.body = {
  76. code: 0,
  77. message: '登录成功',
  78. data: result,
  79. };
  80. });
  81. // 获取用户信息
  82. router.get('/user-info', auth_1.authMiddleware, async (ctx) => {
  83. const userId = ctx.state.user.userId;
  84. const userInfo = await AuthService.getUserInfo(userId);
  85. ctx.body = {
  86. code: 0,
  87. message: 'success',
  88. data: userInfo,
  89. };
  90. });
  91. // 更新用户信息
  92. router.put('/user-info', auth_1.authMiddleware, async (ctx) => {
  93. const userId = ctx.state.user.userId;
  94. const { nickname, avatar } = ctx.request.body;
  95. const user = await models_1.prisma.user.findUnique({ where: { id: parseInt(userId) } });
  96. if (!user) {
  97. throw new errorHandler_1.BadRequestError('用户不存在');
  98. }
  99. const updatedUser = await models_1.prisma.user.update({
  100. where: { id: parseInt(userId) },
  101. data: {
  102. ...(nickname && { nickname }),
  103. ...(avatar && { avatar }),
  104. },
  105. });
  106. ctx.body = {
  107. code: 0,
  108. message: '更新成功',
  109. data: {
  110. nickname: updatedUser.nickname,
  111. avatar: updatedUser.avatar,
  112. },
  113. };
  114. });
  115. exports.default = router;