fix: 修复旧用户钉钉登录报重复键错误的问题
优化钉钉登录用户查找逻辑: - 优先通过ding_user_id查找用户(处理旧账户数据) - 其次通过unionId生成的email查找 - 解决非钉钉创建的用户使用钉钉登录时的重复键约束错误
This commit is contained in:
parent
3d6c649388
commit
a8ecc8a11f
@ -678,12 +678,29 @@ public class UserService {
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 查找或创建用户(使用unionId作为唯一标识)
|
||||
// 3. 查找或创建用户
|
||||
// 🔥 优先通过ding_user_id查找(处理旧用户数据),其次通过unionId生成的email查找
|
||||
String email = "dingtalk_" + unionId + "@dingtalk.local";
|
||||
User user = userMapper.selectOne(
|
||||
new LambdaQueryWrapper<User>()
|
||||
.eq(User::getEmail, email)
|
||||
);
|
||||
User user = null;
|
||||
|
||||
// 优先通过钉钉用户ID查找
|
||||
if (dingtalkUserId != null) {
|
||||
user = userMapper.selectOne(
|
||||
new LambdaQueryWrapper<User>()
|
||||
.eq(User::getDingUserId, dingtalkUserId)
|
||||
);
|
||||
if (user != null) {
|
||||
log.info("通过ding_user_id找到已有用户(免登): userId={}, realName={}", user.getId(), user.getRealName());
|
||||
}
|
||||
}
|
||||
|
||||
// 如果通过ding_user_id找不到,再通过email查找
|
||||
if (user == null) {
|
||||
user = userMapper.selectOne(
|
||||
new LambdaQueryWrapper<User>()
|
||||
.eq(User::getEmail, email)
|
||||
);
|
||||
}
|
||||
|
||||
if (user == null) {
|
||||
// 首次登录:创建用户
|
||||
@ -809,12 +826,28 @@ public class UserService {
|
||||
}
|
||||
|
||||
// 4. 查找或创建用户
|
||||
// 使用unionId作为唯一标识
|
||||
// 优先通过ding_user_id查找(更可靠),其次通过unionId生成的email查找
|
||||
String email = "dingtalk_" + unionId + "@dingtalk.local";
|
||||
User user = userMapper.selectOne(
|
||||
new LambdaQueryWrapper<User>()
|
||||
.eq(User::getEmail, email)
|
||||
);
|
||||
User user = null;
|
||||
|
||||
// 🔥 优先通过钉钉用户ID查找(处理旧用户数据)
|
||||
if (dingtalkUserId != null) {
|
||||
user = userMapper.selectOne(
|
||||
new LambdaQueryWrapper<User>()
|
||||
.eq(User::getDingUserId, dingtalkUserId)
|
||||
);
|
||||
if (user != null) {
|
||||
log.info("通过ding_user_id找到已有用户: userId={}, realName={}", user.getId(), user.getRealName());
|
||||
}
|
||||
}
|
||||
|
||||
// 如果通过ding_user_id找不到,再通过email查找
|
||||
if (user == null) {
|
||||
user = userMapper.selectOne(
|
||||
new LambdaQueryWrapper<User>()
|
||||
.eq(User::getEmail, email)
|
||||
);
|
||||
}
|
||||
|
||||
if (user == null) {
|
||||
// 首次登录:创建用户但不分配部门
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user