Skip to content

Commit a9e82d5

Browse files
committed
fix: 修复更新/删除 git identity 时 token 缓存未清除的问题
更新或删除 git identity 后,内存中的旧 token 缓存未被清除, 导致后续请求仍使用已失效的 token。在 TokenProvider 上新增 ClearCache 方法,并在 Update/Delete 操作成功后调用。
1 parent 2db556c commit a9e82d5

2 files changed

Lines changed: 15 additions & 6 deletions

File tree

backend/biz/git/usecase/identity.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,19 @@ import (
2323

2424
// GitIdentityUsecase Git 身份认证用例
2525
type GitIdentityUsecase struct {
26-
cfg *config.Config
27-
repo domain.GitIdentityRepo
28-
logger *slog.Logger
26+
cfg *config.Config
27+
repo domain.GitIdentityRepo
28+
tokenProvider *TokenProvider
29+
logger *slog.Logger
2930
}
3031

3132
// NewGitIdentityUsecase 创建 Git 身份认证用例
3233
func NewGitIdentityUsecase(i *do.Injector) (domain.GitIdentityUsecase, error) {
3334
return &GitIdentityUsecase{
34-
cfg: do.MustInvoke[*config.Config](i),
35-
repo: do.MustInvoke[domain.GitIdentityRepo](i),
36-
logger: do.MustInvoke[*slog.Logger](i).With("module", "GitIdentityUsecase"),
35+
cfg: do.MustInvoke[*config.Config](i),
36+
repo: do.MustInvoke[domain.GitIdentityRepo](i),
37+
tokenProvider: do.MustInvoke[*TokenProvider](i),
38+
logger: do.MustInvoke[*slog.Logger](i).With("module", "GitIdentityUsecase"),
3739
}, nil
3840
}
3941

@@ -119,6 +121,7 @@ func (u *GitIdentityUsecase) Update(ctx context.Context, uid uuid.UUID, req *dom
119121
u.logger.ErrorContext(ctx, "failed to update git identity", "error", err, "user_id", uid, "id", req.ID)
120122
return err
121123
}
124+
u.tokenProvider.ClearCache(req.ID)
122125
return nil
123126
}
124127

@@ -148,6 +151,7 @@ func (u *GitIdentityUsecase) Delete(ctx context.Context, uid uuid.UUID, id uuid.
148151
u.logger.ErrorContext(ctx, "failed to delete git identity", "error", err, "user_id", uid, "id", id)
149152
return err
150153
}
154+
u.tokenProvider.ClearCache(id)
151155
return nil
152156
}
153157

backend/biz/git/usecase/token.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,11 @@ func (p *TokenProvider) refreshGitee(_ context.Context, gi *db.GitIdentity) (str
215215
return resp.AccessToken, resp.RefreshToken, time.Unix(resp.ExpiresAt(), 0), nil
216216
}
217217

218+
// ClearCache 清除指定 GitIdentity 的 token 缓存
219+
func (p *TokenProvider) ClearCache(identityID uuid.UUID) {
220+
p.tokenCache.Delete(identityID.String())
221+
}
222+
218223
// resolveSiteConfig 通过 baseURL 的 host 获取 OAuth 配置
219224
func (p *TokenProvider) resolveSiteConfig(ctx context.Context, baseURL string) (*domain.OAuthSiteConfig, error) {
220225
if p.siteResolver == nil {

0 commit comments

Comments
 (0)