第三方登录-google-google email与email注册的account绑定

This commit is contained in:
khalil
2025-07-10 11:46:10 +08:00
parent d0d6e4b5be
commit e5c66e89a1
4 changed files with 79 additions and 48 deletions

View File

@@ -1,6 +1,7 @@
package com.accompany.core.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@@ -32,5 +33,7 @@ public class GoogleOpenidRef implements Serializable {
*/
private Date createTime;
@TableField(exist = false)
private boolean register;
}

View File

@@ -48,10 +48,9 @@ public class AccountService extends ServiceImpl<AccountMapper, Account> {
* @param unionId
* @return
*/
public Account getAccountByThird(Byte type, String unionId, String signApp) {
public Account getAccountByThird(Byte type, String unionId) {
QueryWrapper<Account> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(Account::getUnionId, unionId).eq(Account::getThirdLoginType, type)
.eq(StringUtils.hasText(signApp), Account::getSignupApp, signApp);
wrapper.lambda().eq(Account::getUnionId, unionId).eq(Account::getThirdLoginType, type);
List<Account> accounts = list(wrapper);
if (CollectionUtils.isEmpty(accounts)) {
return null;

View File

@@ -25,24 +25,35 @@ public class GoogleOpenidRefServiceImpl extends ServiceImpl<GoogleOpenidRefMappe
@Override
public GoogleOpenidRef getRefByEmail(String email, String idToken) {
GoogleOpenidRef googleOpenidRef = baseMapper.selectById(email);
if (null != googleOpenidRef){
return googleOpenidRef;
}
if (StringUtils.isBlank(idToken)){
if (!isValidEmailFormat(email) || StringUtils.isBlank(idToken)){
return null;
}
GoogleOpenidRef googleOpenidRef = null;
GoogleTokenVerifier.GoogleUserInfo sub = googleTokenVerifier.verifyAndGetUserInfo(idToken);
if (sub != null && StringUtils.isNotEmpty(sub.getUserId()) && email.equals(sub.getEmail())) {
googleOpenidRef = new GoogleOpenidRef();
googleOpenidRef.setEmail(sub.getEmail());
googleOpenidRef.setOpenId(sub.getUserId());
googleOpenidRef.setCreateTime(new Date());
}
if (null == googleOpenidRef){
return null;
}
GoogleOpenidRef dbRef = baseMapper.selectById(googleOpenidRef.getEmail());
if (null == dbRef){
baseMapper.insert(googleOpenidRef);
return googleOpenidRef;
googleOpenidRef.setRegister(true);
}
return null;
return googleOpenidRef;
}
private boolean isValidEmailFormat(String email) {
String regex = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$";
return email.matches(regex);
}
}