自定义AuthenticationService到ZfcUser

时间:2015-07-27 22:11:51

标签: php zend-framework zend-framework2 zfcuser

我有一个我想在ZfcUser模块中使用的AuthenticationService的自定义实现,但我可以将此类设置为模块。实施似乎是固定的。

供应商\ ZF-公地\ ZFC用户\ Module.php

'zfcuser_auth_service' => function ($sm) {
    return new \Zend\Authentication\AuthenticationService(
         $sm->get('ZfcUser\Authentication\Storage\Db'),
         $sm->get('ZfcUser\Authentication\Adapter\AdapterChain')
      );
 }

最初的要求是在CustomAuthenticationService中实现每个用户的唯一活动会话。有什么想法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您的使用案例不清楚;通常,身份验证适配器是您通常会自定义的类,而不是实际的身份验证服务。

尽管如此,您可以使用自己的服务覆盖默认服务,前提是您使用相同的名称注册服务,并在ZfcUser模块之后加载模块。

假设您的自定义身份验证服务位于您自己的Auth命名空间/模块中,并使用类Auth\Service\CustomAuthenticationService

Auth\Module.php中注册服务(或根据工厂的类型,该模块的module.config.php)。

class Module
{
    public function getServiceConfig()
    {
        return [
            'aliases' => [
                'MyAuthenticationService' => 'zfcuser_auth_service',
            ],
            'factories' => [
                'zfcuser_auth_service' => function($sm) {
                    return new \Auth\Service\CustomAuthenticationService(
                        $sm->get('ZfcUser\Authentication\Storage\Db'),
                        $sm->get('ZfcUser\Authentication\Adapter\AdapterChain')
                    );
                },
            ],
        ];
    }
}

最后,确保在ZfcUserapplication.config.php之后加载模块。

return [
    'modules' => [
        //...
        'ZfcUser',
        'Auth',
        // ...
    ],
];

答案 1 :(得分:0)

执行登录操作时,只会触发auth适配器。要处理每个请求,您可以覆盖允许验证每个请求中的标识的存储适配器。在配置文件中添加' ZfcUser \ Authentication \ Storage \ Db'属性poiting到您的自定义存储类。

'service_manager' => array(
    'invokables' => array(
    'ZfcUser\Authentication\Storage\Db' => 'MyCustom\Authentication\Storage'),
...