我有一个我想在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中实现每个用户的唯一活动会话。有什么想法可以解决这个问题吗?
答案 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')
);
},
],
];
}
}
最后,确保在ZfcUser
中application.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'),
...