symfonycasts/reset-password-bundle

Symfony 扩展包,用于添加密码重置功能。

安装次数: 4,687,649

依赖项: 26

建议者: 0

安全性: 0

星级: 463

关注者: 9

分支: 65

开放性问题: 28

类型:symfony-bundle

v1.22.0 2024-06-06 11:59 UTC

README

担心如何处理忘记密码的用户?我们为你解决了这个问题!此扩展包提供了一种安全且开箱即用的解决方案,允许用户重置他们忘记的密码。

安装

可以使用 Composer 或 Symfony 二进制文件 安装此扩展包。

composer require symfonycasts/reset-password-bundle

使用方法

有两种开始使用的方法,最简单和推荐的方法是使用 Symfony 的 MakerBundle。Maker 会处理从创建配置到生成模板、控制器和实体的所有事情。

使用 Symfony 的 MakerBundle(推荐)

  • 运行 bin/console make:reset-password,回答几个问题,然后享受我们的扩展包!

手动设置

如果您喜欢自己处理所有工作,请查看 手动设置指南。我们仍然建议使用 Maker 命令来了解我们如何期望使用此扩展包。

如果您在安装后使用了我们的 Symfony Maker 命令 bin/console make:reset-password,则您的应用程序已准备就绪。转到 https://your-apps-domain/reset-password,填写表单,点击发送到您邮箱的链接,然后更改密码。就这样!ResetPasswordBundle 会处理其余部分。

以上假设您已经设置了 认证 以及在应用程序中配置了 Symfony 的 mailer

配置

您可以在 Maker 创建的 config/packages/reset_password.yaml 配置文件中更改扩展包的默认配置参数。

symfonycasts_reset_password:
    request_password_repository: App\Repository\ResetPasswordRequestRepository
    lifetime: 3600
    throttle_limit: 3600
    enable_garbage_collection: true

生产环境可能需要在 config/packages/routing.yaml 中定义 default_uri 以防止电子邮件中的 URI 指向 localhost。

# config/packages/routing.yaml
when@prod:
    framework:
        router:
            # ...
            default_uri: '<your project's root URI>'

参数

request_password_repository

必需

ResetPasswordRequest 实体的存储库的完整命名空间。如果您使用了 make:reset-password,则这将设置为 App\Repository\ResetPasswordRequestRepository

lifetime

可选 - 默认为 3600

这是重置密码请求在创建后有效的时间(以秒为单位)。

throttle_limit

可选 - 默认为 3600

这是用户在请求后续重置请求之前必须经过的时间(以秒为单位)。

将此值设置为 等于或高于 lifetime 将防止用户在之前的重置尝试成功完成或过期之前请求密码重置。

将此值设置为 低于 lifetime 将允许用户进行多次密码重置请求,即使之前的请求未成功完成或尚未过期。这允许处理用户从未收到密码重置请求电子邮件的情况。

enable_garbage_collection

可选 - 默认为 true

启用或禁用密码重置清理器,该清理器处理可能留在持久性中的过期密码重置请求。

高级用法

从持久性中清除 ResetPasswordRequest 对象

ResetPasswordRequestRepositoryInterface::removeRequests() 方法,该方法在 ResetPasswordRequestRepositoryTrait 中实现,可以用来从持久性中删除单个用户的全部请求对象。这与垃圾回收机制不同,垃圾回收机制仅自动删除所有用户的过期请求对象。

通常,当您需要删除因可疑活动更改电子邮件地址的用户请求对象时,您会调用此方法,并且可能在该用户的“旧”受损电子邮件地址下在持久性中存在有效的请求对象。

// ProfileController

#[Route(path: '/profile/{id}', name: 'app_update_profile', methods: ['GET', 'POST'])]
public function profile(Request $request, User $user, ResetPasswordRequestRepositoryInterface $repository): Response
{
    $originalEmail = $user->getEmail();

    $form = $this->createFormBuilder($user)
        ->add('email', EmailType::class)
        ->add('save', SubmitType::class, ['label' => 'Save Profile'])
        ->getForm()
    ;
    
    $form->handleRequest($request);
    
    if ($form->isSubmitted() && $form->isValid()) {
        if ($originalEmail !== $user->getEmail()) {
            // The user changed their email address.
            // Remove any old reset requests for the user.
            $repository->removeRequests($user);
        }
        
        // Persist the user object and redirect...
    }
    
    return $this->render('profile.html.twig', ['form' => $form]);
}

支持

如果您对我们的包有任何问题、问题或建议,请随时提交问题。与Symfony的Maker Bundle相关的问题,特别是 make:reset-password,应在Symfony Maker 仓库中解决。

安全问题

对于与安全相关的漏洞,我们要求您发送电子邮件到 ryan [at] symfonycasts.com,而不是创建问题。

这将给我们机会在发布修复程序之前解决该问题,而不会在修复程序发布之前公开漏洞。