diff --git a/service/oauth.go b/service/oauth.go index ea97608..4b445e3 100644 --- a/service/oauth.go +++ b/service/oauth.go @@ -441,6 +441,12 @@ func (os *OauthService) UnBindThird(thirdType string, userid uint) error { return global.DB.Where("user_id = ? and third_type = ?", userid, thirdType).Delete(&model.UserThird{}).Error } +// DeleteUserByUserId: When user is deleted, delete all third party bindings +func (os *OauthService) DeleteUserByUserId(userid uint) error { + return global.DB.Where("user_id = ?", userid).Delete(&model.UserThird{}).Error +} + + // InfoById 根据id取用户信息 func (os *OauthService) InfoById(id uint) *model.Oauth { u := &model.Oauth{} diff --git a/service/user.go b/service/user.go index 75fb653..cb8baa5 100644 --- a/service/user.go +++ b/service/user.go @@ -148,8 +148,24 @@ func (us *UserService) Create(u *model.User) error { func (us *UserService) Logout(u *model.User, token string) error { return global.DB.Where("user_id = ? and token = ?", u.Id, token).Delete(&model.UserToken{}).Error } + +// Delete 删除用户和oauth信息 func (us *UserService) Delete(u *model.User) error { - return global.DB.Delete(u).Error + // 使用锁进行保护,确保用户删除和 OAuth 删除的原子性 + global.Lock.Lock("DeleteUserByUserId") + defer global.Lock.UnLock("DeleteUserByUserId") + + // 删除用户 + if err := global.DB.Delete(u).Error; err != nil { + return err + } + + // 删除关联的 OAuth 信息 + if err := AllService.OauthService.DeleteUserByUserId(u.Id); err != nil { + return err + } + + return nil } // Update 更新