使用第三个参数自定义登录

时间:2012-03-11 03:55:01

标签: php symfony

我正在为Symfony2开发一个相对简单的登录系统。

我掌握了基础知识并且工作正常。

这有点特别之处在于我需要一种方法来提供第三个值(生态系统价值)。我的数据库中的用户名本身并不是唯一的,而是制作具有生态系统价值的唯一对。

生态系统价值由他们登录的表单提供。

如何在执行登录时考虑此生态系统价值?

2 个答案:

答案 0 :(得分:6)

查看How to load Security Users from the Database (the Entity Provider)上的食谱教程 - 特别是关于Authenticating Someone with a Custom Entity Provider的部分。

本部分介绍如何更改/创建UserProviderInterface以允许通过电子邮件地址或用户名登录。显然,这不是你想要的,但是 - 修改代码以查询/验证你的第三个登录参数应该是相对微不足道的。

理想情况下,您可能会想要创建自己的UserProvider,幸运的是,有一本食谱教程:How to create a custom User Provider


更新:要处理第3个登录选项并将其传递给自定义提供程序(上面创建),您还需要创建自定义身份验证提供程序。看看How to create a custom Authentication Provider上的(又一个)食谱文章。本文专门用于处理用于身份验证的额外请求标头参数,但使用此示例,您应该能够为请求POST值换出请求标头。

使用cookbook文章了解Symfony2的身份验证如何工作,但使用(并扩展)Symfony2的用户名/密码功能,只需包含您的第3个参数。有些课程要看:

答案 1 :(得分:0)

您可以创建自定义Password Authenticator(> = Symfony 2.6)并在那里设置属性:

  1. createToken():创建令牌(您可以使用UsernamePasswordToken)并为其设置属性,从$ request中获取所需的数据。
  2. authenticateToken():这里你使用第3个变量($ token-> getAttribute())。如果它影响下面的loadUserByUsername。
  3. 在authenticateToken()中,您有UserProvider和loadUserByUsername。我所做的是使用my user provider(扩展FOSUserBundle并覆盖所述方法)并使用用户名和其他所需数据将数组传递给它。不要忘记检查loadUserByUsername中传递的内容(例如,如果它是一个字符串,那么调用parent :: loadUserByUsername)。

    我确信使用loadUserByUsername的这个技巧很糟糕,但我不知道如何做到这一点。