在登录表单中选择国家[确定]
- >在ZfcUserLdap \ Authentication \ Adapter \ Ldap.php上的身份验证方法我正确地在表单中设置了国家/地区
如何将国家/地区存储到会话变量中
- >由于zfcUser已定义存储并且在登录步骤中定义了国家/地区,因此我想使用该存储
我将非常感谢您完成此任务的任何澄清或提示。
zfcUserLdap模块的逻辑更多,因为auth是针对LDAP服务器的。 我在zfcUserLdap的扩展实体中添加了一个新属性 country ,它沿着 findByUsername 方法设置为Entity对象。
public function findByUsername($username, $country = null)
{
$pUser = $this->ldap->findByUsername($username);
if (isObjectNotNull($pUser))
{
$this->entity->setDisplayName(getLdapUserFirstName($pUser) . ' ' . getLdapUserLastName($pUser));
$this->entity->setEmail(getLdapUserMail($pUser));
$this->entity->setId(getLdapUserUid($pUser));
$this->entity->setUsername(getLdapUserUid($pUser));
$this->entity->setLdapcObject($pUser);
$this->entity->setUserCountry($country);
return $this->entity;
}
else {
return null;
}
}
要使此处的国家/地区有用,因为身份验证过程可能会检查用户名是否具有在该国家/地区内工作的权限。我稍后需要添加该检查。
像这样,国家是实体对象的一部分,所以我可以像获得用户名一样获得国家。
现在,我创建了一个非常类似于ZfcUserDisplayName的View Helper。我只是更新了获取metohd以获得国家财产。
$countryName = $user->getUserCountry();
我计划创建一个Controller插件,以便从任何Controller获取国家/地区。
答案 0 :(得分:1)
ZFCUser有一个您应该利用的身份验证事件。在你的模块的主要引导程序中:
$sm = $e->getApplication()->getServiceManager();
$zfcAuthEvents = $e->getApplication()->getServiceManager()->get('ZfcUser\Authentication\Adapter\AdapterChain')->getEventManager();
$zfcAuthEvents->attach( 'authenticate', function( $authEvent ) use( $sm ){
try
{
// use $authEvent->getIdentity() to get country and stick it in a session
return true;
}
catch( \Exception $x )
{
// handle it
}
});
你在会话中的存储方式取决于你,有400种方法可以为那只猫提供皮肤。