Просмотр исходного кода

fix: RegisterByOauth without Email

Tao Chen 1 год назад
Родитель
Сommit
91a33fe7f6
1 измененных файлов с 27 добавлено и 3 удалено
  1. 27 3
      service/user.go

+ 27 - 3
service/user.go

@@ -10,6 +10,8 @@ import (
10
 	"math/rand"
10
 	"math/rand"
11
 	"strconv"
11
 	"strconv"
12
 	"time"
12
 	"time"
13
+	"strings"
14
+	"fmt"
13
 )
15
 )
14
 
16
 
15
 type UserService struct {
17
 type UserService struct {
@@ -150,6 +152,8 @@ func (us *UserService) CheckUserEnable(u *model.User) bool {
150
 
152
 
151
 // Create 创建
153
 // Create 创建
152
 func (us *UserService) Create(u *model.User) error {
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
 	u.Password = us.EncryptPassword(u.Password)
157
 	u.Password = us.EncryptPassword(u.Password)
154
 	res := global.DB.Create(u).Error
158
 	res := global.DB.Create(u).Error
155
 	return res
159
 	return res
@@ -282,7 +286,17 @@ func (us *UserService) RegisterByOauth(oauthUser *model.OauthUser , op string) *
282
 	}
286
 	}
283
 	//check if this email has been registered 
287
 	//check if this email has been registered 
284
 	email := oauthUser.Email
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
 	user := us.InfoByEmail(email)
300
 	user := us.InfoByEmail(email)
287
 	tx := global.DB.Begin()
301
 	tx := global.DB.Begin()
288
 	if user.Id != 0 {
302
 	if user.Id != 0 {
@@ -290,8 +304,10 @@ func (us *UserService) RegisterByOauth(oauthUser *model.OauthUser , op string) *
290
 	} else {
304
 	} else {
291
 		ut = &model.UserThird{}
305
 		ut = &model.UserThird{}
292
 		ut.FromOauthUser(0, oauthUser, oauthType, op)
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
 			Username: usernameUnique,
311
 			Username: usernameUnique,
296
 			GroupId:  1,
312
 			GroupId:  1,
297
 		}
313
 		}
@@ -361,6 +377,7 @@ func (us *UserService) IsPasswordEmptyByUser(u *model.User) bool {
361
 	return us.IsPasswordEmptyById(u.Id)
377
 	return us.IsPasswordEmptyById(u.Id)
362
 }
378
 }
363
 
379
 
380
+// Register 注册
364
 func (us *UserService) Register(username string, password string) *model.User {
381
 func (us *UserService) Register(username string, password string) *model.User {
365
 	u := &model.User{
382
 	u := &model.User{
366
 		Username: username,
383
 		Username: username,
@@ -394,3 +411,10 @@ func (us *UserService) TokenInfoById(id uint) *model.UserToken {
394
 func (us *UserService) DeleteToken(l *model.UserToken) error {
411
 func (us *UserService) DeleteToken(l *model.UserToken) error {
395
 	return global.DB.Delete(l).Error
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
+}