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
 func DatabaseAutoUpdate() {
103
 func DatabaseAutoUpdate() {
104
-	version := 241
104
+	version := 242
105
 
105
 
106
 	db := global.DB
106
 	db := global.DB
107
 
107
 

+ 14 - 22
lib/lock/local_test.go

@@ -51,30 +51,22 @@ func TestLocal_GetLock(t *testing.T) {
51
 func TestLocal_Lock(t *testing.T) {
51
 func TestLocal_Lock(t *testing.T) {
52
 	l := NewLocal()
52
 	l := NewLocal()
53
 	wg := sync.WaitGroup{}
53
 	wg := sync.WaitGroup{}
54
-	wg.Add(3)
54
+	m := 10
55
+	wg.Add(m)
55
 	i := 0
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
 	wg.Wait()
68
 	wg.Wait()
69
+	fmt.Println(i)
78
 
70
 
79
 }
71
 }
80
 func TestSyncMap(t *testing.T) {
72
 func TestSyncMap(t *testing.T) {

+ 1 - 1
model/user.go

@@ -2,7 +2,7 @@ package model
2
 
2
 
3
 type User struct {
3
 type User struct {
4
 	IdModel
4
 	IdModel
5
-	Username string     `json:"username" gorm:"default:'';not null;index,unique"`
5
+	Username string     `json:"username" gorm:"default:'';not null;uniqueIndex"`
6
 	Password string     `json:"-" gorm:"default:'';not null;"`
6
 	Password string     `json:"-" gorm:"default:'';not null;"`
7
 	Nickname string     `json:"nickname" gorm:"default:'';not null;"`
7
 	Nickname string     `json:"nickname" gorm:"default:'';not null;"`
8
 	Avatar   string     `json:"avatar" gorm:"default:'';not null;"`
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
 // RegisterByOauth 注册
222
 // RegisterByOauth 注册
223
 func (us *UserService) RegisterByOauth(thirdType, thirdName, uid string) *model.User {
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
 	tx := global.DB.Begin()
233
 	tx := global.DB.Begin()
225
-	ut := &model.UserThird{
234
+	ut = &model.UserThird{
226
 		OpenId:    uid,
235
 		OpenId:    uid,
227
 		ThirdName: thirdName,
236
 		ThirdName: thirdName,
228
 		ThirdType: thirdType,
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
 	username := us.GenerateUsernameByOauth(thirdName)
240
 	username := us.GenerateUsernameByOauth(thirdName)
240
 	u := &model.User{
241
 	u := &model.User{
@@ -242,6 +243,10 @@ func (us *UserService) RegisterByOauth(thirdType, thirdName, uid string) *model.
242
 		GroupId:  1,
243
 		GroupId:  1,
243
 	}
244
 	}
244
 	global.DB.Create(u)
245
 	global.DB.Create(u)
246
+	if u.Id == 0 {
247
+		tx.Rollback()
248
+		return u
249
+	}
245
 
250
 
246
 	ut.UserId = u.Id
251
 	ut.UserId = u.Id
247
 	global.DB.Create(ut)
252
 	global.DB.Create(ut)