berny / one-time-access-bundle
1.2
2016-05-23 15:27 UTC
Requires
- symfony/symfony: ~2.3.41|~2.7.13|~2.8.6|~3.0.6
This package is not auto-updated.
Last update: 2022-02-01 12:24:31 UTC
README
你是否曾想在Symfony2应用程序中通过 一次性访问URL 验证用户?
不再寻找!这就是你的包! :D
⚠ 注意 ⚠
注意包重命名
- 在
1.0.0
之前:berny/one-time-access-bundle
- 在
1.0.0
之后:xphere/one-time-access-bundle
我为什么想那样做呢?
您可以使用一次性访问URL进行
- 访问“忘记密码?”表单
- 无密码系统
功能
- 可定制的URL
- 用户定义的令牌生成和检索
- 多个防火墙
兼容性
在Symfony2 2.1.1及更高版本下测试
安装
从 composer/packagist
- 将
"xphere/one-time-access-bundle": "^1.1"
添加到您的composer.json
文件中 - 使用
new xPheRe\OneTimeAccessBundle\xPheReOneTimeAccessBundle()
将包添加到您的内核中
使用方法
在任何至少有 route
的防火墙中添加 one_time_access
键。
security: firewalls: root: one_time_access: route: acme_myapp_ota
当前用户提供者必须实现 OneTimeAccessBundle\Security\Provider\ProviderInterface
。
security: provider: users: entity: # AcmeMyAppBundle:UserRepository implements ProviderInterface class: AcmeMyAppBundle:User firewalls: root: provider: users one_time_access: route: acme_myapp_ota
您可以将 ota_provider
键设置为定义一个实现该接口的不同服务。
services: acme.myapp.ota.repository: class: Acme\\MyAppSecurity\\UserProvider security: firewalls: root: one_time_access: route: acme_myapp_ota ota_provider: acme.myapp.ota.repository
默认情况下,route
必须有一个 _token
参数来提取一次性访问令牌。
acme_myapp_ota: pattern: ^/autologin/{_token} defaults: { _controller: AcmeMyAppBundle:Login:oneTimeAccess }
这可以通过 parameter
键进行自定义。
security: firewalls: root: one_time_access: route: acme_myapp_ota parameter: otatoken
当然,您可以像通常一样定义您的路由,使用 YAML、XML、注解等。
令牌生成
此包不提供令牌生成功能。创建唯一的令牌并将它们与用户相关联由您自己完成。
这可能是Doctrine实现的一部分
class OTARepository extends EntityRepository implements ProviderInterface { public function generateOTA($user) { $token = md5($user->getUsername() . time()); $ota = new YourOneTimeAccessEntity($user, $token); $this->getEntityManager()->persist($ota); $this->getEntityManager()->flush($ota); return $ota; } public function loadUserByOTA($token) { $ota = $this->findOneByToken($token); if ($ota) { // Remember, user must be defined as EAGER in OTAEntity return $ota->getUser(); } } public function invalidateByOTA($token) { $ota = $this->findOneByToken($token); $this->getEntityManager()->remove($ota); $this->getEntityManager()->flush(); } }
路由生成
路由生成也由您自己完成。是的!你说我们在偷懒吗?不是的!这意味着为您的一次性访问链接提供完全可定制的路由。
例如
$ota = $oneTimeAccessRepository->generateOnetimeAccess($user); $url = $this->generateUrl('acme_myapp_ota', array( '_token' => $ota->getToken(), ));