具有多个或备用列的Zf2 + Doctrine 2身份验证适配器

时间:2014-05-02 12:51:00

标签: zend-framework doctrine-orm doctrine zend-framework2 zend-auth

我正在使用一个网站,用户可以在该网站上输入两个电子邮件地址(主要和次要)以及密码。

如果用户输入了他的主电子邮件和密码,他就会成功登录。

但是,我想提供的是,如果用户输入他的辅助电子邮件而不是主要电子邮件,即使这样他也会登录。而我遇到的问题是如何创建备用的Doctrine Auth Adapter或类似的东西。< / p>

这是我在module.config.php中所做的:

'doctrine' => array(
    'driver' => array(
        __NAMESPACE__ . '_driver' => array(
            'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
            'cache' => 'array',
            'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
        ),
        'orm_default' => array(
            'drivers' => array(
                __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
            )
        )
    ),
    'authentication' => array(
        'orm_default' => array(
            'object_manager' => 'Doctrine\ORM\EntityManager',
            'identity_class' => 'User\Entity\LoginDetails',
            'identity_property' => 'primary_email',
            'credential_property' => 'password',
        ),
    ),
)

Is there any option to add an identity property which will be alternative ?

I am using Zend framework 2 and Doctrine 2

1 个答案:

答案 0 :(得分:3)

  

是否有任何选项可以添加一个可替代的身份属性?

不,DoctrineModule没有内置的选项。

考虑扩展DoctrineModule \ Authentication \ Adapter \ ObjectRepository以覆盖authenticate()方法。

然后,至少,您需要使用新的更新的适配器替换默认适配器。如果你看看DoctrineModule中的各个工厂,你应该有一个良好的开端。

基本上,您的某个模块将要覆盖ServiceManager中的doctrine.authenticationadapter.[orm|odm]_default配置密钥。这将导致DoctrineModule将扩展的ObjectRepository注入AuthenticationService而不是默认的。