feat(auth): 完善扫码登录状态逻辑,支持绑定手机号和跳转

- 新增响应字段 nextAction、redirectUrl 和 successMessage,用于表示下一步操作
- 扫码登录状态为绑定手机号时,设置 nextAction 为 bind_phone,清空跳转地址
- 扫码已确认且有访问令牌时,设置跳转控制台页面,带成功提示信息
- 其他状态默认保持等待状态,确保扫码流程向前推进
- 更新扫码登录响应模型,优化前端流程控制体验
This commit is contained in:
2026-04-07 01:43:51 +08:00
parent 3c89cbce40
commit e73e0fb6b5
4 changed files with 50 additions and 0 deletions

View File

@@ -37,6 +37,15 @@ public class QrLoginStatusResponse {
@Schema(description = "状态提示信息")
private String message;
@Schema(description = "下一步操作bind_phone-绑定手机号, redirect-跳转, login-直接登录")
private String nextAction;
@Schema(description = "跳转URL当nextAction为redirect时使用")
private String redirectUrl;
@Schema(description = "成功消息")
private String successMessage;
public QrLoginStatusResponse(String status, String accessToken, User userInfo, Long expiresIn, Integer tenantId) {
this.status = status;
this.accessToken = accessToken;

View File

@@ -442,6 +442,18 @@ public class QrLoginServiceImpl implements QrLoginService {
|| QR_LOGIN_STATUS_BIND_PHONE.equals(qrLoginData.getStatus()));
response.setMessage(qrLoginData.getMessage());
// 设置下一步操作逻辑
if (QR_LOGIN_STATUS_BIND_PHONE.equals(qrLoginData.getStatus()) || Boolean.TRUE.equals(qrLoginData.getNeedBindPhone())) {
response.setNextAction("bind_phone");
response.setRedirectUrl(null);
} else if (QR_LOGIN_STATUS_CONFIRMED.equals(qrLoginData.getStatus()) && StrUtil.isNotBlank(qrLoginData.getAccessToken())) {
response.setNextAction("redirect");
response.setRedirectUrl("/console");
response.setSuccessMessage("登录成功,即将跳转到控制台");
} else {
response.setNextAction("wait");
}
if (qrLoginData.getUserId() != null) {
try {
User user = userService.getAllByUserId(String.valueOf(qrLoginData.getUserId()));