Browse Source

fix: RegisterByOauth without Email

Tao Chen 1 year ago
parent
commit
6fb1fbc5b1
1 changed files with 27 additions and 3 deletions
  1. 27 3
      service/user.go

+ 27 - 3
service/user.go

@@ -10,6 +10,8 @@ import (
10 10
 	"math/rand"
11 11
 	"strconv"
12 12
 	"time"
13
+	"strings"
14
+	"fmt"
13 15
 )
14 16
 
15 17
 type UserService struct {
@@ -150,6 +152,8 @@ func (us *UserService) CheckUserEnable(u *model.User) bool {
150 152
 
151 153
 // Create 创建
152 154
 func (us *UserService) Create(u *model.User) error {
155
+	// The initial username should be formatted, and the username should be unique
156
+	u.Username = us.formatUsername(u.Username)
153 157
 	u.Password = us.EncryptPassword(u.Password)
154 158
 	res := global.DB.Create(u).Error
155 159
 	return res
@@ -282,7 +286,17 @@ func (us *UserService) RegisterByOauth(oauthUser *model.OauthUser , op string) *
282 286
 	}
283 287
 	//check if this email has been registered 
284 288
 	email := oauthUser.Email
285
-	oauthType := AllService.OauthService.GetTypeByOp(op)
289
+	err, oauthType := AllService.OauthService.GetTypeByOp(op)
290
+	if err != nil {
291
+		return nil
292
+	}
293
+	// if email is empty, use username and op as email
294
+	if email == "" {
295
+		email = oauthUser.Username + "@" + op
296
+	} 
297
+	email = strings.ToLower(email)
298
+	// update email to oauthUser, in case it contain upper case
299
+	oauthUser.Email = email
286 300
 	user := us.InfoByEmail(email)
287 301
 	tx := global.DB.Begin()
288 302
 	if user.Id != 0 {
@@ -290,8 +304,10 @@ func (us *UserService) RegisterByOauth(oauthUser *model.OauthUser , op string) *
290 304
 	} else {
291 305
 		ut = &model.UserThird{}
292 306
 		ut.FromOauthUser(0, oauthUser, oauthType, op)
293
-		usernameUnique := us.GenerateUsernameByOauth(oauthUser.Username)
294
-		user := &model.User{
307
+		// The initial username should be formatted
308
+		username := us.formatUsername(oauthUser.Username)
309
+		usernameUnique := us.GenerateUsernameByOauth(username)
310
+		user = &model.User{
295 311
 			Username: usernameUnique,
296 312
 			GroupId:  1,
297 313
 		}
@@ -361,6 +377,7 @@ func (us *UserService) IsPasswordEmptyByUser(u *model.User) bool {
361 377
 	return us.IsPasswordEmptyById(u.Id)
362 378
 }
363 379
 
380
+// Register 注册
364 381
 func (us *UserService) Register(username string, password string) *model.User {
365 382
 	u := &model.User{
366 383
 		Username: username,
@@ -394,3 +411,10 @@ func (us *UserService) TokenInfoById(id uint) *model.UserToken {
394 411
 func (us *UserService) DeleteToken(l *model.UserToken) error {
395 412
 	return global.DB.Delete(l).Error
396 413
 }
414
+
415
+// Helper functions, used for formatting username
416
+func (us *UserService) formatUsername(username string) string {
417
+	username = strings.ReplaceAll(username, " ", "")
418
+	username = strings.ToLower(username)
419
+	return username
420
+}