密码重置
小于 1 分钟
密码重置
为用户提供“忘记密码 → 邮件链接 → 设置新密码”的完整流程,兼顾安全与可用性。
目标
- 不泄露账户是否存在(统一返回)
- 单次有效、短期有效(默认 30 分钟)
- 速率限制与审计日志
- 重置成功后失效历史会话/令牌
pub async fn reset_password(uid: i64, arg: ResetPasswordParams) -> Result<String> {
let db = DB().await;
let ouser = SysUserModel::find_by_id(uid).await;
let user = if let Some(user) = ouser {
user
} else {
return Err("Old Password Error".into());
};
if !util::verify_password(&arg.old_password, user.password.as_str()) {
return Err("Password Error".into());
}
let mut user_active: sys_user::ActiveModel = user.into();
let new_password = util::hash_password(&arg.new_password).unwrap();
user_active.password = Set(new_password);
user_active.update(db).await?;
Ok("Success".into())
}