Skip to content

refactor: fix dependency injection in UserManager event handlers #114

@Besthope-Official

Description

@Besthope-Official

Use Case

UserManager.on_after_reset_password() directly imports infrastructure dependencies, creating tight coupling and making testing difficult.

Proposed Solution

Inject RefreshTokenManager via constructor:

# Before (src/auth/manager.py:43-50)
async def on_after_reset_password(self, user: User, request: Request | None = None):
    from src.cache import cache  # ❌ Direct import
    refresh_manager = RefreshTokenManager(cache, self.settings)
    await refresh_manager.revoke_all_user_tokens(user.id)

# After
class UserManager(BaseUserManager):
    def __init__(self, ..., refresh_manager: RefreshTokenManager):
        self.refresh_manager = refresh_manager
    
    async def on_after_reset_password(self, ...):
        await self.refresh_manager.revoke_all_user_tokens(user.id)  # ✅ Injected

Alternatives Considered

N/A - Dependency injection is the standard solution for this pattern.

Implementation Notes

  • Affected file: src/auth/manager.py:43-50
  • Update get_user_manager() dependency function to inject RefreshTokenManager
  • Improves testability and follows dependency inversion principle

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions