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

logout should unbind uuid and uid of peer

Tao Chen 1 год назад
Родитель
Сommit
d31d669734
3 измененных файлов с 43 добавлено и 8 удалено
  1. 4 3
      model/userToken.go
  2. 15 0
      service/peer.go
  3. 24 5
      service/user.go

+ 4 - 3
model/userToken.go

@@ -2,9 +2,10 @@ package model
2
 
2
 
3
 type UserToken struct {
3
 type UserToken struct {
4
 	IdModel
4
 	IdModel
5
-	UserId    uint   `json:"user_id" gorm:"default:0;not null;index"`
6
-	Token     string `json:"token" gorm:"default:'';not null;index"`
7
-	ExpiredAt int64  `json:"expired_at" gorm:"default:0;not null;"`
5
+	UserId    	uint   `json:"user_id" gorm:"default:0;not null;index"`
6
+	DeviceUuid 	string `json:"device_uuid"`
7
+	Token     	string `json:"token" gorm:"default:'';not null;index"`
8
+	ExpiredAt 	int64  `json:"expired_at" gorm:"default:0;not null;"`
8
 	TimeModel
9
 	TimeModel
9
 }
10
 }
10
 
11
 

+ 15 - 0
service/peer.go

@@ -26,6 +26,13 @@ func (ps *PeerService) InfoByRowId(id uint) *model.Peer {
26
 	return p
26
 	return p
27
 }
27
 }
28
 
28
 
29
+// FindByUserIdAndUuid 根据用户id和uuid查找peer
30
+func (ps *PeerService) FindByUserIdAndUuid(uuid string,userId uint) *model.Peer {
31
+	p := &model.Peer{}
32
+	global.DB.Where("uuid = ? and user_id = ?", uuid, userId).First(p)
33
+	return p
34
+}
35
+
29
 // UuidBindUserId 绑定用户id
36
 // UuidBindUserId 绑定用户id
30
 func (ps *PeerService) UuidBindUserId(uuid string, userId uint) {
37
 func (ps *PeerService) UuidBindUserId(uuid string, userId uint) {
31
 	peer := ps.FindByUuid(uuid)
38
 	peer := ps.FindByUuid(uuid)
@@ -35,6 +42,14 @@ func (ps *PeerService) UuidBindUserId(uuid string, userId uint) {
35
 	}
42
 	}
36
 }
43
 }
37
 
44
 
45
+// UuidUnbindUserId 解绑用户id, 用于用户注销
46
+func (ps *PeerService) UuidUnbindUserId(uuid string, userId uint) {
47
+	peer := ps.FindByUserIdAndUuid(uuid, userId)
48
+	if peer.RowId > 0 {
49
+		global.DB.Model(peer).Update("user_id", 0)
50
+	}
51
+}
52
+
38
 // ListByUserIds 根据用户id取列表
53
 // ListByUserIds 根据用户id取列表
39
 func (ps *PeerService) ListByUserIds(userIds []uint, page, pageSize uint) (res *model.PeerList) {
54
 func (ps *PeerService) ListByUserIds(userIds []uint, page, pageSize uint) (res *model.PeerList) {
40
 	res = &model.PeerList{}
55
 	res = &model.PeerList{}

+ 24 - 5
service/user.go

@@ -73,9 +73,10 @@ func (us *UserService) GenerateToken(u *model.User) string {
73
 func (us *UserService) Login(u *model.User, llog *model.LoginLog) *model.UserToken {
73
 func (us *UserService) Login(u *model.User, llog *model.LoginLog) *model.UserToken {
74
 	token := us.GenerateToken(u)
74
 	token := us.GenerateToken(u)
75
 	ut := &model.UserToken{
75
 	ut := &model.UserToken{
76
-		UserId:    u.Id,
77
-		Token:     token,
78
-		ExpiredAt: time.Now().Add(time.Hour * 24 * 7).Unix(),
76
+		UserId:    	u.Id,
77
+		Token:     	token,
78
+		DeviceUuid: llog.Uuid,
79
+		ExpiredAt: 	time.Now().Add(time.Hour * 24 * 7).Unix(),
79
 	}
80
 	}
80
 	global.DB.Create(ut)
81
 	global.DB.Create(ut)
81
 	llog.UserTokenId = ut.UserId
82
 	llog.UserTokenId = ut.UserId
@@ -153,9 +154,27 @@ func (us *UserService) Create(u *model.User) error {
153
 	return res
154
 	return res
154
 }
155
 }
155
 
156
 
156
-// Logout 退出登录
157
+// GetUuidByToken 根据token和user取uuid
158
+func (us *UserService) GetUuidByToken(u *model.User, token string) string {
159
+	ut := &model.UserToken{}
160
+	err :=global.DB.Where("user_id = ? and token = ?", u.Id, token).First(ut).Error
161
+	if err != nil {
162
+		return ""
163
+	}
164
+	return ut.DeviceUuid
165
+}
166
+
167
+// Logout 退出登录 -> 删除token, 解绑uuid
157
 func (us *UserService) Logout(u *model.User, token string) error {
168
 func (us *UserService) Logout(u *model.User, token string) error {
158
-	return global.DB.Where("user_id = ? and token = ?", u.Id, token).Delete(&model.UserToken{}).Error
169
+	uuid := us.GetUuidByToken(u, token)
170
+	err := global.DB.Where("user_id = ? and token = ?", u.Id, token).Delete(&model.UserToken{}).Error
171
+	if err != nil {
172
+		return err
173
+	}
174
+	if uuid != "" {
175
+		AllService.PeerService.UuidUnbindUserId(uuid, u.Id)
176
+	}
177
+	return nil
159
 }
178
 }
160
 
179
 
161
 // Delete 删除用户和oauth信息
180
 // Delete 删除用户和oauth信息