问题:通过用户名(和密码)登录或通过电子邮件(和密码)登录都很容易,但如何启用这两种方式以获得最佳用户体验?
方法:我在Stackoverflow* 和各种教程上找到了多个答案,没有一个适用于我的Symfony版本(6.3.3),或者我只是太笨了,让他们工作(专业的Web开发人员)。
- 创建我自己的AbstractAuthenticator扩展。失败的原因是:a)需要复制、修改大量逻辑。b)过多地使用复杂的登录逻辑功能会带来安全风险。c)我未能让一个重要的构造函数服务在我的扩展中工作。
- 或者,我可以扩展一些内部Symfony类,但它们是final类,因此扩展它们不是一个有效的选择。
- 手动登录是可能的,但这只是将上述问题转移到其他地方(构造“密码”、“徽章”、“令牌”等)。
解决方案:实际上我找到了一个很好的解决方法,我仍然问这个问题的原因是a)与其他人分享我的解决方案,B)也许它有什么问题,我没有看到它,还有更好的方法吗?
- 类似的问题,但与旧版本的Symfony(他们没有为我工作):
- Symfony 5.3 User Login by username or email
- Symfony Login with username OR email
2条答案
按热度按时间azpvetkf1#
如果您使用的是symfony maker auth,只需在se src/Security/中编辑authenticate方法
然后需要在templates/security/login.html. wig中更改登录表单的模板
将电子邮件的默认输入更改为
odopli942#
所以,我的解决方案是:
而不是执行以下操作:
1.登录表单
1.重定向到登录路由,其中Symfony登录魔术发生
1.重定向到登录控制器,在那里我可以编辑结果(如果成功,重定向,如果不成功,错误消息)
我在步骤1和步骤2之间添加了另一个操作:
1.登录表单:
1.5重定向到我自己的控制器操作,不触及Symfony登录逻辑:Controller/AuthenticationController.php
1.现在,真实的登录发生了,使用Symfony逻辑。
第三步与以前一样: