2016-04-06 5 views
1

Hallo ich versuche, ein Login mit einem Benutzernamen ein Passwort mehrere Rollen und eine ip Verifikation zu erstellen, wo, wenn der Benutzer keine zugewiesene IP hat kann er nicht einloggen, ich speichere meine IP als VARCHAR in meiner Benutzertabelle und ich versuche, die IP auf der Tabelle mit dem des Benutzers zu vergleichen, der sich anzumelden versucht, aber wenn ich mich anmelde, gibt es mir diese IP :: 1 zurück, die die IPV6 von localhost ist, wie ich gelesen und eingelesen habe meine db ich habe 127.0.0.1 (ich habe es versucht mit :: 1 auf der db aber kein erfolg) meine frage ist: Was soll ich tun, um eine korrekte Antwort zu erhalten? hier ist mein CodeYii2 ip based login

public function validateIp($ip) { 
    if($this->ip == Yii::$app->request->userIp) 
    { 
     return $this->ip == $ip;     
    } 
     else 
     { 
      $this->addError($ip, 'La IP no esta habilitada para este usuario'); 
     } 

} 

Und hier ich die Login

public function login() 
    { 
     if ($this->validateIp(Yii::$app->request->userIp)) 
     { 
     if ($this->validate()) 
     { 
      return Yii::$app->user->login($this->getUser()); 
     } 
     } 
    } 
+6

IP erfolgreich zu sein Adressen ändern sich sehr, Sie sollten sich wahrscheinlich nicht auf sie verlassen zur Authentifizierung. –

+0

Wie Alexander sagte, das ist eine schlechte Idee, viele Internet-Provider geben den Haushalten keine statische IP-Adresse. Bleiben Sie bei der Übereinstimmung mit dem Benutzernamen und (hashed) Passwort – Jester

+0

eine Alternative zu IP-Adresse kann eine zusätzliche Prüfung zu einem zuvor generierten Token sein. Es könnte auf der Clientseite gespeichert oder per E-Mail gesendet werden. Die integrierte Passwortwiederherstellung in der erweiterten Vorlage kann in diesem Fall ein gutes Beispiel sein. –

Antwort

1

Nach Umschreiben des Code ausführen i endlich

//getting user ip 
function conseguirIpUser() 
{ 
    $ip = Yii::$app->request->userIp; 
    return $ip; 
} 
    //Validate ip 
    public function validarIp() { 

    $ipUsuario= $this->getUser(); 

    if($this->conseguirIpUser() == $ipUsuario->ip){ 
     return true; 
    } 

} 

und Anmeldung rief

public function login() 
{  
    #Si los datos son validos se realiza el login y se da un mensaje de bienvenida 
    if ($this->validarIp()) { 
     if ($this->validate()) { 
      Yii::$app->session->setFlash('success', 'Bienvenido/a!'); 
      return Yii::$app->user->login($this->getUser()); 
     } 
    } 
    #en caso que la ip no sea valida para este usuario se regresara al index y se mostrara un mensaje de error 

    if (!$this->validarIp()) { 
     Yii::$app->session->setFlash('error', 'Usted no esta autorizado para inicar sesión en este equipo'); 
     return $this->refresh(); 
    } 
}