feat(auth): Increment token version on login to revoke old sessions

- Change login to call IncrTokenVersion instead of GetTokenVersion
    - Add IncrTokenVersion public function wrapping incrTokenVersion
    - Existing tokens become invalid when user logs in again
master
veypi 3 weeks ago
parent 4c021e7e93
commit 4bb1283a0a

@ -117,9 +117,9 @@ func loginWithCode(x *vigo.X, req *LoginWithCodeRequest) (*AuthResponse, error)
return generateAuthResponseForUser(x, &user) return generateAuthResponseForUser(x, &user)
} }
// generateAuthResponseForUser 为用户生成认证响应(登录/注册调用,不递增版本) // generateAuthResponseForUser 为用户生成认证响应(登录时递增版本,踢掉旧会话
func generateAuthResponseForUser(x *vigo.X, user *models.User) (*AuthResponse, error) { func generateAuthResponseForUser(x *vigo.X, user *models.User) (*AuthResponse, error) {
version, err := auth.GetTokenVersion(user.ID) version, err := auth.IncrTokenVersion(user.ID)
if err != nil { if err != nil {
return nil, vigo.ErrInternalServer.WithError(err) return nil, vigo.ErrInternalServer.WithError(err)
} }

@ -575,6 +575,11 @@ func GetTokenVersion(userID string) (int64, error) {
return getTokenVersion(userID) return getTokenVersion(userID)
} }
// IncrTokenVersion 递增用户 token 版本号,返回新版本(登录时调用,实现踢旧会话)
func IncrTokenVersion(userID string) (int64, error) {
return incrTokenVersion(userID)
}
// RevokeAllTokens 撤销用户所有 token递增版本号 // RevokeAllTokens 撤销用户所有 token递增版本号
func RevokeAllTokens(userID string) error { func RevokeAllTokens(userID string) error {
_, err := incrTokenVersion(userID) _, err := incrTokenVersion(userID)

Loading…
Cancel
Save