Browse Source

fix oauth register #26 #23

ljw 1 year ago
parent
commit
001884a4d8
4 changed files with 30 additions and 33 deletions
  1. 1 1
      cmd/apimain.go
  2. 14 22
      lib/lock/local_test.go
  3. 1 1
      model/user.go
  4. 14 9
      service/user.go

+ 1 - 1
cmd/apimain.go

@@ -101,7 +101,7 @@ func main() {
101 101
 }
102 102
 
103 103
 func DatabaseAutoUpdate() {
104
-	version := 241
104
+	version := 242
105 105
 
106 106
 	db := global.DB
107 107
 

+ 14 - 22
lib/lock/local_test.go

@@ -51,30 +51,22 @@ func TestLocal_GetLock(t *testing.T) {
51 51
 func TestLocal_Lock(t *testing.T) {
52 52
 	l := NewLocal()
53 53
 	wg := sync.WaitGroup{}
54
-	wg.Add(3)
54
+	m := 10
55
+	wg.Add(m)
55 56
 	i := 0
56
-	go func() {
57
-		l.Lock("key")
58
-		fmt.Println("l1", i)
59
-		i++
60
-		l.UnLock("key")
61
-		wg.Done()
62
-	}()
63
-	go func() {
64
-		l.Lock("key")
65
-		fmt.Println("l2", i)
66
-		i++
67
-		l.UnLock("key")
68
-		wg.Done()
69
-	}()
70
-	go func() {
71
-		l.Lock("key")
72
-		fmt.Println("l3", i)
73
-		i++
74
-		l.UnLock("key")
75
-		wg.Done()
76
-	}()
57
+	for j := 0; j < m; j++ {
58
+		go func() {
59
+			l.Lock("key")
60
+			//fmt.Println(j, i)
61
+			i++
62
+			fmt.Println(j, i)
63
+			l.UnLock("key")
64
+			wg.Done()
65
+		}()
66
+	}
67
+
77 68
 	wg.Wait()
69
+	fmt.Println(i)
78 70
 
79 71
 }
80 72
 func TestSyncMap(t *testing.T) {

+ 1 - 1
model/user.go

@@ -2,7 +2,7 @@ package model
2 2
 
3 3
 type User struct {
4 4
 	IdModel
5
-	Username string     `json:"username" gorm:"default:'';not null;index,unique"`
5
+	Username string     `json:"username" gorm:"default:'';not null;uniqueIndex"`
6 6
 	Password string     `json:"-" gorm:"default:'';not null;"`
7 7
 	Nickname string     `json:"nickname" gorm:"default:'';not null;"`
8 8
 	Avatar   string     `json:"avatar" gorm:"default:'';not null;"`

+ 14 - 9
service/user.go

@@ -221,20 +221,21 @@ func (us *UserService) RegisterByGoogle(name string, email string) *model.User {
221 221
 
222 222
 // RegisterByOauth 注册
223 223
 func (us *UserService) RegisterByOauth(thirdType, thirdName, uid string) *model.User {
224
+	global.Lock.Lock("registerByOauth")
225
+	defer global.Lock.UnLock("registerByOauth")
226
+	ut := AllService.OauthService.UserThirdInfo(thirdType, uid)
227
+	if ut.Id != 0 {
228
+		u := &model.User{}
229
+		global.DB.Where("id = ?", ut.UserId).First(u)
230
+		return u
231
+	}
232
+
224 233
 	tx := global.DB.Begin()
225
-	ut := &model.UserThird{
234
+	ut = &model.UserThird{
226 235
 		OpenId:    uid,
227 236
 		ThirdName: thirdName,
228 237
 		ThirdType: thirdType,
229 238
 	}
230
-	//global.DB.Where("open_id = ?", githubId).First(ut)
231
-	//这种情况不应该出现,如果出现说明有bug
232
-	//if ut.Id != 0 {
233
-	//	u := &model.User{}
234
-	//	global.DB.Where("id = ?", ut.UserId).First(u)
235
-	//	tx.Commit()
236
-	//	return u
237
-	//}
238 239
 
239 240
 	username := us.GenerateUsernameByOauth(thirdName)
240 241
 	u := &model.User{
@@ -242,6 +243,10 @@ func (us *UserService) RegisterByOauth(thirdType, thirdName, uid string) *model.
242 243
 		GroupId:  1,
243 244
 	}
244 245
 	global.DB.Create(u)
246
+	if u.Id == 0 {
247
+		tx.Rollback()
248
+		return u
249
+	}
245 250
 
246 251
 	ut.UserId = u.Id
247 252
 	global.DB.Create(ut)