jmikola / auto-login
通过单个令牌简化Symfony安全组件的自动登录。
Requires
- php: >=7.1
- psr/log: ^1.0
- symfony/event-dispatcher: ^4.4 || ^5.0
- symfony/http-kernel: ^4.4 || ^5.0
- symfony/security-core: ^4.4 || ^5.0
- symfony/security-http: ^4.4.1 || ^5.0
Requires (Dev)
- symfony/phpunit-bridge: ^5.2
README
此库实现了一个基于单个查询参数的认证监听器,用于Symfony安全组件。这对于在电子邮件和新闻通讯链接中提供一键登录功能非常有用。
安装
$ composer require jmikola/auto-login
兼容性
此库需要Symfony 4.3或更高版本。
用法
此库实现了认证提供者和防火墙监听器类,可以将它们连接到Symfony的安全组件以拦截请求并根据单个请求参数自动认证用户。
要在全栈Symfony应用程序中利用此库,您可能需要使用JmikolaAutoLoginBundle。在安全组件文档中可以找到手动注册认证提供者和防火墙监听器的示例。
令牌
当用户通过请求中的令牌参数自动登录时,他们将使用AutoLoginToken实例进行认证。在授权的上下文中,此令牌满足IS_AUTHENTICATED_FULLY。理想情况下,可以将令牌限制为IS_AUTHENTICATED_REMEMBERED,但目前尚不支持。有关这些授权级别的更多信息,请参阅Symfony的授权文档。
事件
如果使用事件调度器实例构建,防火墙监听器可以分配事件。
交互式登录
请求中通过令牌参数成功认证后,将分配一个包含已认证的AutoLoginToken实例的交互式登录核心事件。
已认证
此事件由Antonio Trapani在PR #9中贡献。
如果请求中存在令牌参数,但用户已经认证,将分配一个包含令牌值的自定义事件。在分配此事件后,监听器的默认行为是立即返回,因为可能没有要执行的工作。
此事件的一个实际用途是将用户的电子邮件地址标记为已确认,假设带有令牌的自动登录链接仅通过电子邮件发送。作为一个业务需求,确认服务也可能监听交互式登录核心事件,并在认证令牌是AutoLoginToken实例时进行操作。
注意:与交互式登录事件不同,此事件中的令牌参数尚未经过验证。检查是否与当前认证的用户匹配是监听器的责任。因此,注入此库的提供者类可能会有所帮助。
覆盖已认证用户
此功能由Mathieu Gauthier-Lafaye在PR #10中贡献。
默认情况下,监听器只有在用户已经认证的情况下才会派发事件;它不会覆盖现有的已认证用户。在某些情况下,可能希望允许自动登录链接覆盖现有的已认证用户。否则,用户需要先登出才能使用自动登录链接。将监听器的布尔选项 override_already_authenticated 设置为 true 将启用此行为。