我正在使用 zfcuser 想要使用IP地址登录而不是要求用户输入密码,IP存储在数据库中,用户需要输入他/她的用户名/电子邮件进行身份验证,使用 authenticate.pre 事件从数据库检索IP,我的代码是:
$ this-> listeners [] = $ sharedManager-> attach(' ZfcUser \ Authentication \ Adapter \ AdapterChain',' authenticate.pre',array($ this, ' LoginIp'));
LoginIp 方法是:
public function loginIp(Event $e) {
$em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
//Get user from DB
$user = $em->getRepository('LcUser\Entity\User')
->findOneBy(array('email' => $_POST['identity']));
//Get IP Address from Group
$group = $em->getRepository('LcGroup\Entity\Group')
->findOneBy(array('id' => $user->getGroup()));
//Check if IP of organization and current machine is same,
//Set authentication with username from user and password from DB
if($group->getIpAddresses()==$_SERVER['SERVER_ADDR']){
$_POST['credential']=$user->getUnhashedPassword();
}
}
问题 我正在通过从DB分配新值来更新$ _POST ['凭证']值,但是zfcuser不会处理它而是处理通过提交登录表单而来的旧值?我需要帮助来弄清楚如何更新登录凭证以便使用IP和用户名登录用户而无需密码?
答案 0 :(得分:0)
但是,公共IP地址是唯一的,您无法使用它来唯一标识您的用户(或客户端)。如果用户使用NAT(例如您的办公室网络)在网络上,则他们共享一个公共IP地址。
使用您的解决方案,这些用户(在同一网络内请求您的网站的用户)将共享相同的身份验证身份。这很可能不是你想要的。
检查here或here或other pages on Google,了解有关此主题的更多信息。
注意: MAC地址应该是唯一标识客户端(设备)但the concept of unique MAC addresses has proven to fail和MAC地址也很容易被其他人欺骗(伪造)所以我也不建议使用该解决方案。我建议坚持使用更传统的解决方案。