FastAPIUsers中get_reset_password_router报错AttributeError求助
问题
在FastAPIUsers中注册重置密码路由时出现以下错误:
File "/Users/alexm/Downloads/Dev/news_minds/venv/lib/python3.12/site-packages/fastapi_users/router/reset.py", line 57, in forgot_password await user_manager.forgot_password(user, request) File "/Users/alexm/Downloads/Dev/news_minds/venv/lib/python3.12/site-packages/fastapi_users/manager.py", line 381, in forgot_password self.reset_password_token_secret, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'UserManager' object has no attribute 'reset_password_token_secret'. Did you mean: 'reset_password_token_audience'?
自定义的UserManager类代码如下:
class UserManager(IntegerIDMixin, BaseUserManager): async def validate_password(self, password, user): if len(password) < 8: raise InvalidPasswordException( reason='foo' ) if user.email in password: raise InvalidPasswordException( reason='bar' ) async def on_after_register(self, user, request=None): print(f'foobar')
使用版本:FastAPI == 0.115.5 / FastAPIUsers == 14.0.0。BaseUserManager中已定义reset_password_token_secret属性,但仍报错。
解决方案
在自定义UserManager类中直接配置属性:
在UserManager类里添加重置密码JWT相关配置属性,示例:class UserManager(IntegerIDMixin, BaseUserManager): # 重置密码JWT配置 reset_password_token_secret = "你的重置密码密钥字符串" reset_password_token_lifetime_seconds = 3600 # 令牌有效期1小时 # 若需邮箱验证功能,可同步配置对应密钥 verification_token_secret = "你的邮箱验证密钥字符串" verification_token_lifetime_seconds = 86400 # 令牌有效期24小时 async def validate_password(self, password, user): # ... 原有验证逻辑 ... async def on_after_register(self, user, request=None): # ... 原有注册后逻辑 ...实例化时传入配置(推荐用于敏感数据):
避免硬编码密钥,可通过环境变量等方式在创建UserManager实例时传入参数:import os from dotenv import load_dotenv load_dotenv() def get_user_manager(user_db: SQLAlchemyUserDatabase = Depends(get_user_db)): yield UserManager( user_db, reset_password_token_secret=os.getenv("RESET_PASSWORD_SECRET"), reset_password_token_lifetime_seconds=3600, verification_token_secret=os.getenv("VERIFICATION_SECRET"), )属性类型说明:
reset_password_token_secret的类型为SecretType,直接传入字符串即可,FastAPI Users会自动处理为安全的Secret类型。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

