我正在努力使用Symfony2的自定义身份验证机制。
我想做什么: 我需要基于常规UsernamePasswordForm的身份验证的修改行为。唯一需要的修改是,不会根据数据库检查凭据,而是一些自定义的unix auth deamon。用户自己仍然位于数据库中。
我做了什么:
我玩了一个基于这个Symfony cookbook entry的完整的自定义身份验证提供程序,大多数部分只是扩展了不同的UsernamePassword类,但它还没有成功。我在服务配置中设置AuthenticationListener时遇到了一些问题,因为UsernamePasswordFormAuthenticationListener
有很多必需的参数。目前我不确定它是否会在最后解决,因为我的数据库设置存在一些问题。
我需要什么: 是否有更简单的方法来修改默认登录表单而不需要完整的AuthenticationProvider要求? Imho在默认行为中进行一些自定义修改是一个非常常见的问题。
对任何想法或提示都会感到高兴。
答案 0 :(得分:0)
我自己没试过,但你应该可以通过设置参数来插入自己的AuthenticationProvider:
security.authentication.provider.dao.class:
..Security\Core\Authentication\Provider\MyDaoAuthenticationProvider
您的提供商会延长Dao并覆盖checkAuthentication。
同样,我实际上并没有这样做,安全系统非常敏感,因此可能会或可能不会。
答案 1 :(得分:0)
回答我自己的问题:由于this blog post显示了解决方案,我终于设法解决了我的问题。基本思想是扩展默认表单登录身份验证并“窃取”其侦听器。这样您就可以重用大部分现有代码。关键部分是AuthenticationProvider
和SecurityFactory
的创建和配置。不要错过在form_login
中使用您自己的提供商密钥而不是security.yml
。
在博客文章中,作者创建了自己的UserProvider
,但它也只使用默认的数据库。