From 0afd1b7d17f3810106ba6c649f772751d9e32b6e Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 7 Jan 2026 10:18:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=92=89=E9=92=89?= =?UTF-8?q?=E5=85=8D=E7=99=BB=E6=97=B6=E7=9A=84=E5=8F=82=E6=95=B0=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/designhub/controller/AuthController.java | 4 ++-- .../src/main/java/com/designhub/dto/LoginDTO.java | 8 +++----- .../java/com/designhub/service/UserService.java | 14 ++++++++++++-- frontend/src/api/auth.ts | 4 ++-- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/backend/src/main/java/com/designhub/controller/AuthController.java b/backend/src/main/java/com/designhub/controller/AuthController.java index a54fe03..d3ab619 100644 --- a/backend/src/main/java/com/designhub/controller/AuthController.java +++ b/backend/src/main/java/com/designhub/controller/AuthController.java @@ -42,8 +42,8 @@ public class AuthController { @Operation(summary = "用户登录", description = "支持密码登录、钉钉登录、Casdoor登录") @PostMapping("/login") - public Result login(@Valid @RequestBody LoginDTO loginDTO) { - log.info("用户登录请求: {}", loginDTO.getUsername()); + public Result login(@RequestBody LoginDTO loginDTO) { + log.info("用户登录请求: loginType={}, username={}", loginDTO.getLoginType(), loginDTO.getUsername()); LoginVO loginVO = userService.login(loginDTO); return Result.success(loginVO); } diff --git a/backend/src/main/java/com/designhub/dto/LoginDTO.java b/backend/src/main/java/com/designhub/dto/LoginDTO.java index 987af2f..be45af7 100644 --- a/backend/src/main/java/com/designhub/dto/LoginDTO.java +++ b/backend/src/main/java/com/designhub/dto/LoginDTO.java @@ -1,24 +1,22 @@ package com.designhub.dto; import lombok.Data; -import jakarta.validation.constraints.NotBlank; /** * 登录请求DTO + * 注:验证逻辑在Service层根据loginType进行处理 */ @Data public class LoginDTO { /** - * 用户名 + * 用户名(密码登录时必填) */ - @NotBlank(message = "用户名不能为空") private String username; /** - * 密码 + * 密码(密码登录时必填) */ - @NotBlank(message = "密码不能为空") private String password; /** diff --git a/backend/src/main/java/com/designhub/service/UserService.java b/backend/src/main/java/com/designhub/service/UserService.java index e9abee9..23a286f 100644 --- a/backend/src/main/java/com/designhub/service/UserService.java +++ b/backend/src/main/java/com/designhub/service/UserService.java @@ -808,7 +808,14 @@ public class UserService { String loginType = loginDTO.getLoginType(); if ("password".equals(loginType)) { - // 用户名密码登录 + // 用户名密码登录 - 验证必填参数 + if (loginDTO.getUsername() == null || loginDTO.getUsername().trim().isEmpty()) { + throw new BusinessException(ResultCode.PARAM_ERROR, "用户名不能为空"); + } + if (loginDTO.getPassword() == null || loginDTO.getPassword().trim().isEmpty()) { + throw new BusinessException(ResultCode.PARAM_ERROR, "密码不能为空"); + } + User user = getUserByUsername(loginDTO.getUsername()); if (user == null) { throw new BusinessException(ResultCode.USER_NOT_EXIST); @@ -836,7 +843,10 @@ public class UserService { .roleIds(user.getRoleIds()) .build(); } else if ("dingtalk".equals(loginType)) { - // 钉钉OAuth 2.0登录 + // 钉钉OAuth 2.0登录 - 验证授权码 + if (loginDTO.getAuthCode() == null || loginDTO.getAuthCode().trim().isEmpty()) { + throw new BusinessException(ResultCode.PARAM_ERROR, "钉钉授权码不能为空"); + } return handleDingTalkLogin(loginDTO.getAuthCode()); } else if ("casdoor".equals(loginType)) { // Casdoor登录 - 暂时返回错误,待后续实现 diff --git a/frontend/src/api/auth.ts b/frontend/src/api/auth.ts index c841150..2c368e1 100644 --- a/frontend/src/api/auth.ts +++ b/frontend/src/api/auth.ts @@ -3,8 +3,8 @@ import request from '@/utils/request' const API_BASE = '' export interface LoginParams { - username: string - password: string + username?: string + password?: string loginType?: string authCode?: string }