2016-06-30 15 views
0

Meine App verwendet das Standard-Auth-Modul, um sich per E-Mail und Passwort-Kombination anzumelden.Laravel 5.2 Authentifizierung multipe Felder

Ich muss es ändern, so kann ein Benutzer entweder eine E-Mail oder einen eindeutigen 7-stelligen Code mit einem Passwort eingeben.

Auf den Laravel-Dokumenten habe ich diesen Code gefunden.

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) { 
    // The user is active, not suspended, and exists. 
} 

Ich habe bereits die Tabelle modifed den richtigen Code enthalten, aber noch nicht herausgefunden, wie die Authentifizierung zu tun.

Hat jemand anderes diese Art von Problem schon mal erlebt? Danke im Voraus.

+0

Versuchen Sie, reguläre Ausdrücke zu verwenden, um festzustellen, ob es sich bei der Eingabe um eine E-Mail oder einen Code handelt, und versuchen Sie dann, basierend darauf, was Sie haben –

Antwort

0

Ich glaube Laravel Authentifizierung das 'E-Mail' Feld ist nur eine Zeichenfolge und es gibt keine auferlegte Validierung auf dem Feld als E-Mail (mit Ausnahme der Ansicht Vorlage Feld Implementierung). Sie können also das Feld einfach durch ein anderes "Benutzername" -Feld Ihrer Wahl ersetzen und Ihre eigene Validierung während der Erstellung durchführen.

Hinweis Dieser Auszug aus der Authentifizierungsseite https://laravel.com/docs/5.1/authentication

Note: In these examples, email is not a required option, it is merely used as an example. You should use whatever column name corresponds to a "username" in your database. 
1

In Ihrer AuthController Überschreibung (add) die getCredentials Methode wie folgt:

protected function getCredentials(Request $request) 
{ 
    $login = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'digits'; //Change digits to your table column name 
    return [ 
     $login => $request->input('login'), 
     'password' => $request->input('password') //you can add any db field here e.g: "active" => 1 
    ]; 
} 

Zur Validierung müssen Sie validateLogin auch außer Kraft zu setzen:

protected function validateLogin(Request $request) 
{ 
    $this->validate($request, [ 
     'login' => 'required', 'password' => 'required', 
    ]); 
} 

Vergessen Sie nicht, um den Eingang Name zu login aus Ihrer Sicht zu ändern!