|
@@ -779,6 +779,44 @@ func (s *Server) OAuthLogin(c *gin.Context) {
|
|
|
if err := tx.Create(user).Error; err != nil {
|
|
if err := tx.Create(user).Error; err != nil {
|
|
|
tx.Rollback()
|
|
tx.Rollback()
|
|
|
fmt.Printf("OAuth create user error: %v\n", err)
|
|
fmt.Printf("OAuth create user error: %v\n", err)
|
|
|
|
|
+
|
|
|
|
|
+ // 如果是 phone 重复,说明用户已存在但缺少社交绑定,自动补绑定并登录
|
|
|
|
|
+ var existingUser entity.DtUser
|
|
|
|
|
+ if dbErr := db.Where("phone = ?", oauthPhone).First(&existingUser).Error; dbErr == nil {
|
|
|
|
|
+ // 补创建社交绑定
|
|
|
|
|
+ newSocial := entity.DtUserSocial{
|
|
|
|
|
+ UserId: existingUser.Id,
|
|
|
|
|
+ Platform: req.Provider,
|
|
|
|
|
+ Account: req.OpenId,
|
|
|
|
|
+ Nickname: req.Nickname,
|
|
|
|
|
+ Avatar: req.Avatar,
|
|
|
|
|
+ Extra: "{}",
|
|
|
|
|
+ }
|
|
|
|
|
+ db.Create(&newSocial)
|
|
|
|
|
+
|
|
|
|
|
+ // 更新登录时间
|
|
|
|
|
+ db.Model(&entity.DtUser{}).Where("id = ?", existingUser.Id).
|
|
|
|
|
+ Update("last_login_time", time.Now().Unix())
|
|
|
|
|
+
|
|
|
|
|
+ existToken, tokenErr := middleware.GenerateJWT(middleware.Member{ID: existingUser.Id, Uid: existingUser.Uid})
|
|
|
|
|
+ if tokenErr != nil {
|
|
|
|
|
+ ctx.Fail("login_failed")
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ ctx.OK(gin.H{
|
|
|
|
|
+ "token": existToken,
|
|
|
|
|
+ "user": gin.H{
|
|
|
|
|
+ "id": existingUser.Id,
|
|
|
|
|
+ "uid": existingUser.Uid,
|
|
|
|
|
+ "nickname": existingUser.Nickname,
|
|
|
|
|
+ "avatar": existingUser.Avatar,
|
|
|
|
|
+ "phone": existingUser.Phone,
|
|
|
|
|
+ "email": existingUser.Email,
|
|
|
|
|
+ },
|
|
|
|
|
+ })
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
ctx.Fail("login_failed")
|
|
ctx.Fail("login_failed")
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|