Bläddra i källkod

国内谷歌登陆

zwhui 2 år sedan
förälder
incheckning
48b9f2d02b

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/User.java

@@ -91,6 +91,11 @@ public class User extends BaseEntity implements Serializable{
     @TableField(exist = false)
     private Long phoneUserId;
 
+    /**
+     * 是否是谷歌授权登录
+     */
+    private Boolean isGoogle;
+
     @Getter
     public enum RegisterEnv{
         wx("公众号h5授权登录"),

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonBackView.java

@@ -90,6 +90,9 @@ public class OrderDonBackView {
 	@DbField("u.email")
 	private String email;
 
+	@DbField("u.is_google")
+	private Boolean isGoogle;
+
 	@DbField("o.money")
 	private BigDecimal money;
 

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/UserView.java

@@ -184,4 +184,7 @@ public class UserView {
      */
     @DbField("u.update_time")
     private Date updateTime;
+
+    @DbField("u.is_google")
+    private Boolean isGoogle;
 }

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/request/LoginReq.java

@@ -2,6 +2,7 @@ package com.cyksj.model.request;
 
 import lombok.Getter;
 import lombok.Setter;
+import lombok.ToString;
 
 /*
  *项目名: netflix
@@ -11,6 +12,7 @@ import lombok.Setter;
  */
 @Getter
 @Setter
+@ToString
 public class LoginReq {
 	private String phone;
 
@@ -59,4 +61,6 @@ public class LoginReq {
 	private String callback;
 
 	private String callbackType;
+
+	private String subject;
 }

+ 14 - 0
netflix-dao/src/main/java/com/cyksj/model/response/GoogleLoginRep.java

@@ -0,0 +1,14 @@
+package com.cyksj.model.response;
+
+import lombok.Data;
+
+/**
+ * @author zwhui
+ * @date 2023/8/22 15:45
+ */
+@Data
+public class GoogleLoginRep {
+    private String email;
+
+    private String subject;
+}

+ 11 - 1
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -367,6 +367,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 			wrapper.eq(User::getEmail, loginReq.getEmail());
 			redisService.del(RedisService.key.EMAIL_CODE_KEY.getNameFormat(loginReq.getEmail()));
 		}
+		if (loginReq.getType() == 3){
+			wrapper.eq(User::getEmail, loginReq.getEmail());
+		}
 		//保存用户信息
 		User user = this.getOne(wrapper);
 		String dsCode = loginReq.getDsCode();
@@ -391,6 +394,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 				}
 			}
 		}
+		if (user != null && loginReq.getType() == 3 && !user.getIsGoogle()) {
+			user.setIsGoogle(true);
+			this.updateById(user);
+		}
 		if (user == null) {
 			user = new User();
 			isNewUser = true;
@@ -402,10 +409,13 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 			if (loginReq.getType() == 1) {
 				user.setLoginPhone(loginReq.getPhone());
 			}
-			if (loginReq.getType() == 2) {
+			if (loginReq.getType() == 2 || loginReq.getType() == 3) {
 				user.setEmail(loginReq.getEmail());
 				name.append("@");
 			}
+			if (loginReq.getType() == 3) {
+				user.setIsGoogle(true);
+			}
 			user.setNickname(String.format("%s%s", name.toString(), Codec.DoDigest.custom().setAlgorithm(Codec.DoDigest.Algorithm.MD5).setStringData(String.format("%s%s", user.getId(), loginReq.getType() == 1 ? user.getLoginPhone() : user.getEmail())).toHexString().substring(0, 6)));
 			//默认头像
 			user.setHeadimgurl(Constant.DEFAULT_HEAD_IMG);

+ 20 - 0
netflix-web/src/main/java/com/cyksj/web/controller/user/AuthorizationController.java

@@ -3,6 +3,7 @@ package com.cyksj.web.controller.user;
 import cn.hutool.core.codec.Base64;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.EnvCommonService;
@@ -22,6 +23,7 @@ import com.cyksj.model.dto.JsSdkTicket;
 import com.cyksj.model.entity.PhoneCode;
 import com.cyksj.model.entity.User;
 import com.cyksj.model.request.LoginReq;
+import com.cyksj.model.response.GoogleLoginRep;
 import com.cyksj.model.response.UserAuthLoginResp;
 import com.cyksj.model.response.WxGzhQrCodeTicketRep;
 import com.cyksj.redis.RedisService;
@@ -42,6 +44,8 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.Optional;
 
 /**
@@ -431,4 +435,20 @@ public class AuthorizationController {
         log.info("微信授权转跳.url: {}", url);
         response.sendRedirect(url.contains("?") ? url + "&t=" + StpUserUtil.getTokenValue() : url + "?t=" + StpUserUtil.getTokenValue());
     }
+
+    @PostMapping("/google/login")
+    public Result<UserAuthLoginResp> googleLogin(LoginReq loginReq,String credential) throws Exception {
+        log.info("google loginReq:{},credential:{}", loginReq, credential);
+        String result = HttpUtil.post("https://yinhedvd.com/8083/api2/auth/google/login/inner?credential=" + credential, new HashMap<>());
+        log.info("google result:{}",result);
+        GoogleLoginRep googleLoginRep = Jsons.parseObject(Jsons.toMap(result).get("data"), GoogleLoginRep.class);
+        loginReq.setType(3);
+        loginReq.setEmail(googleLoginRep.getEmail());
+        loginReq.setSubject(googleLoginRep.getSubject());
+        User user = userService.webLogin(loginReq);
+        //写回登陆信息
+        StpUserUtil.login(user.getId());
+        UserAuthLoginResp loginPhoneRep = new UserAuthLoginResp(StpUserUtil.getTokenValue(), user.getShowId(), user.getNickname(), user.getHeadimgurl());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(loginPhoneRep);
+    }
 }