symfonycasts / reset-password-bundle
Symfony 扩展包,用于添加密码重置功能。
Requires
- php: >=8.1.10
- ext-json: *
- symfony/config: ^5.4 | ^6.0 | ^7.0
- symfony/dependency-injection: ^5.4 | ^6.0 | ^7.0
- symfony/deprecation-contracts: ^2.2 | ^3.0
- symfony/http-kernel: ^5.4 | ^6.0 | ^7.0
Requires (Dev)
- doctrine/annotations: ^1.0
- doctrine/doctrine-bundle: ^2.8
- doctrine/orm: ^2.13
- phpstan/phpstan: ^1.11.x-dev
- symfony/framework-bundle: ^5.4 | ^6.0 | ^7.0
- symfony/phpunit-bridge: ^5.4 | ^6.0 | ^7.0
This package is auto-updated.
Last update: 2024-08-31 12:49:13 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
,而不是创建问题。
这将给我们机会在发布修复程序之前解决该问题,而不会在修复程序发布之前公开漏洞。