2016-05-02 14 views
1

私はzfcuserを使用しています。ユーザにパスワードを要求する代わりにIPアドレスでログインしたいのですが、IPはDBに格納されており、ユーザ名/ 、IPがauthenticate.preイベントを使用してDBから取得された私のコードは次のとおりです。ZfcUser IPアドレスでログインする[Zend Framework 2]

ます$ this->リスナー[] = $ sharedManager->( 'ZfcUser \認証\アダプタ\ 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();     
     } 
} 

質問 私はDBからその新しい値を割り当てることにより、$ _POST [「資格」]値を更新していますが、この代わりにプロセスzfcuser処理されません。ログインフォームを送信して来る古い値ですか? IPとユーザー名とパスワードなしでユーザーにログインするためにログイン資格情報を更新する方法を理解する上で助けが必要ですか?

答えて

0

ただし、パブリックIPアドレスは一意であり、ユーザー(またはクライアント)を一意に識別するために使用することはできません。ユーザーがNAT(たとえば、オフィスネットワーク)を使用しているネットワーク上にある場合、1つのパブリックIPアドレスを共有します。

あなたの解決策では、(同じネットワーク内からあなたのウェブサイトをリクエストしている)ユーザーは、同じ認証済みIDを共有します。これはあなたが望むものではない可能性が最も高いです。

このトピックの詳細は、hereまたはhereまたはother pages on Googleを確認してください。

注:AのMACアドレスが(デバイス)を一意クライアントを特定することになっていたが、私はどちらかその溶液を用いて示唆ないようにthe concept of unique MAC addresses has proven to failとMACアドレスも容易に他の人が(偽造)偽装することができます。私はもっ​​と従来の解決策に固執することを提案します。

+0

あなたは正しいですが、私はこの状況に対処しています。特定のグループに所属するユーザー名とグループにDBに格納されているIPアドレスを要求しています。だから、dbに格納されているパスワードを尋ねる代わりに、私はユーザー名とIPを求めています。ありがとう –

+0

@ ZahoorAhmadそして、ユーザーが同じ名前を使用するとどうなりますか? – Wilt

+0

ユーザー名/電子メールはzfcuserで一意です。独自の電子メール/ユーザー名を持つユーザーは、あらかじめ定義されたIPでユーザー名を使用してログインするだけで作成されています。 –

関連する問題