From a9237a1b3875f014b7cb93c249a7b1fe0eb8396a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E9=B9=8F?= <812968653@qq.com> Date: Sun, 6 Sep 2026 09:25:10 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/system_oauth2_client_airline.sql | 22 +++++++++++++++++++ .../service/auth/MemberAuthServiceImpl.java | 10 ++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 sql/mysql/system/system_oauth2_client_airline.sql diff --git a/sql/mysql/system/system_oauth2_client_airline.sql b/sql/mysql/system/system_oauth2_client_airline.sql new file mode 100644 index 0000000..4d7ef9a --- /dev/null +++ b/sql/mysql/system/system_oauth2_client_airline.sql @@ -0,0 +1,22 @@ +-- ---------------------------- +-- 航空账号专用 OAuth2 客户端 +-- 用途:airline-login 签发的 Token 归属 airline 客户端,access/refresh token 有效期极长, +-- App 端登录一次即可长期使用,无需续期;每次打开 App 仅通过 /airline-check +-- 校验账号状态/有效期/设备绑定(见 MemberAuthServiceImpl#createTokenAfterAirlineLoginSuccess)。 +-- 注意:不影响 default 客户端(交友 App 会员仍为 30 分钟 accessToken + 30 天 refreshToken)。 +-- 部署:执行本脚本后再部署新 yudao-server.jar,否则 airline-login 会报"客户端不存在"。 +-- ---------------------------- + +INSERT INTO `system_oauth2_client` +(`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, + `access_token_validity_seconds`, `refresh_token_validity_seconds`, + `redirect_uris`, `authorized_grant_types`, `scopes`, `auto_approve_scopes`, + `authorities`, `resource_ids`, `additional_information`, + `creator`, `create_time`, `updater`, `update_time`, `deleted`) +SELECT 43, 'airline', 'airline123', '航空App专用客户端', '', '南航/东航/海航 App 专用,Token 长期有效', 0, + 2147483647, 2147483647, + '[]', '["password","refresh_token"]', '[]', '[]', + '[]', '[]', '{}', + '1', NOW(), '1', NOW(), b'0' +FROM DUAL +WHERE NOT EXISTS (SELECT 1 FROM `system_oauth2_client` WHERE `client_id` = 'airline' AND `deleted` = b'0'); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java index 62d8e5c..29e18ea 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java @@ -59,6 +59,12 @@ import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.*; @Slf4j public class MemberAuthServiceImpl implements MemberAuthService { + /** + * 航空账号专用 OAuth2 客户端编号(system_oauth2_client 表需存在该记录, + * access/refresh token 有效期设置极长,App 登录一次即可长期使用) + */ + private static final String CLIENT_ID_AIRLINE = "airline"; + @Resource private MemberUserService userService; @Resource @@ -438,9 +444,11 @@ public class MemberAuthServiceImpl implements MemberAuthService { reqDTO.setResult(LoginResultEnum.SUCCESS.getResult()); loginLogApi.createLoginLog(reqDTO); // 创建 Token 令牌(userId 使用航空账号自身编号) + // 使用独立的 airline 客户端:access/refresh token 有效期极长(见 system_oauth2_client 表), + // App 端登录一次即可,无需续期;每次打开 App 仅通过 airline-check 校验账号状态/有效期/设备绑定 OAuth2AccessTokenRespDTO accessTokenRespDTO = oauth2TokenApi.createAccessToken(new OAuth2AccessTokenCreateReqDTO() .setUserId(account.getId()).setUserType(getUserType().getValue()) - .setClientId(OAuth2ClientConstants.CLIENT_ID_DEFAULT)); + .setClientId(CLIENT_ID_AIRLINE)); return AuthConvert.INSTANCE.convert(accessTokenRespDTO, null); }