ZfcUser使用IP地址登录[Zend Framework 2]

时间:2016-05-02 17:18:28

标签: authentication zend-framework2 zfcuser

我正在使用 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和用户名登录用户而无需密码?

1 个答案:

答案 0 :(得分:0)

但是,公共IP地址是唯一的,您无法使用它来唯一标识您的用户(或客户端)。如果用户使用NAT(例如您的办公室网络)在网络上,则他们共享一个公共IP地址。

使用您的解决方案,这些用户(在同一网络内请求您的网站的用户)将共享相同的身份验证身份。这很可能不是你想要的。

检查herehereother pages on Google,了解有关此主题的更多信息。

注意: MAC地址应该是唯一标识客户端(设备)但the concept of unique MAC addresses has proven to fail和MAC地址也很容易被其他人欺骗(伪造)所以我也不建议使用该解决方案。我建议坚持使用更传统的解决方案。