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
Use Case
UserManager.on_after_reset_password()directly imports infrastructure dependencies, creating tight coupling and making testing difficult.Proposed Solution
Inject
RefreshTokenManagervia constructor:Alternatives Considered
N/A - Dependency injection is the standard solution for this pattern.
Implementation Notes
src/auth/manager.py:43-50get_user_manager()dependency function to injectRefreshTokenManager