我使用的是zfcuser,它使用IP地址登录,而不是询问用户密码,IP存储在DB中,用户需要输入用户名/电子邮件进行身份验证,IP是使用事件从db检索的--我的代码是:
$this->listeners[] = $sharedManager->attach('ZfcUser\Authentication\Adapter\AdapterChain','authenticate.pre',数组($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();
}
}问题,我正在更新$_POST的‘凭证’值,从DB分配给它新的值,但是zfcuser没有处理这个问题,而是处理通过提交登录表单而来的旧值?我需要帮助弄清楚如何更新登录凭证,以便使用IP和用户名登录用户和没有密码?
发布于 2016-05-03 12:01:18
但是,公共IP地址是唯一的,您不能使用它唯一地标识用户(或客户端)。如果用户在使用NAT的网络上(例如,您的办公网络),他们共享一个公共IP地址。
使用您的解决方案,这些用户(在同一网络中请求您的网站)将共享相同的身份验证身份。这很可能不是你想要的。
有关此主题的更多信息,请查看这里或这里或Google上的其他页面。
注意: MAC地址应该是唯一标识客户端(设备)的,但是http://www.howtogeek.com/228286/how-is-the-uniqueness-of-mac-addresses-enforced/和MAC地址也很容易被其他人欺骗(伪造),所以我也不建议使用该解决方案。我建议坚持一种更传统的解决办法。
https://stackoverflow.com/questions/36987989
复制相似问题