2017-11-26 1 views
0

ich die benutzerdefinierte Authentifizierung benötigen, und zwar:Laravel: das Verständnis das "Credentials" Methode Mechanismus

  • Benutzerdefinierte Modell und DB-Tabelle für LoginController (gelöst)
  • "Order ID" anstelle von E-Mail für die Authentifizierung (gelöst)

Weil ich die credentials Methode Mechanismus nicht verstehen, erhalte ich die Fehlermeldung:

Type error: Argument 1 passed to Illuminate\Auth\EloquentUserProvider::validateCredentials() 
must be an instance of Illuminate\Contracts\Auth\Authenticatable, 
instance of App\Order given, called in C:\OpenServer\domains\sites-in-development.loc\vendor\laravel\framework\src\Illuminate\Auth\SessionGuard.php on line 

enter image description here

<?php 

class LoginController extends Controller { 

    use AuthenticatesUsers; 

    protected $redirectTo; 
    protected $orderAlias; 

    protected $loginView; 

    /* 
     Here I set the order ID as "username". I don't like this method, 
     because it causes the confusion ($username is actually order ID), 
     but don't know the other way yet. 
     REF is just the class with array contains the string values to avoid hardcoding 
    */ 
    protected $username = REF::tables['orders']['fieldNames']['orderId']; 


    public function __construct() { 

     $this->middleware('guest')->except('logout'); 
     $this->loginView = '00_top'; 

    } 


    public function showLoginForm() { 
     // Work properly 
    } 


    public function login(Request $request) { 

     if ($this->hasTooManyLoginAttempts($request)) { 

      $this->fireLockoutEvent($request); 
      return $this->sendLockoutResponse($request); 
     } 


     // manual validation (work properly) 
     // getting $orderAlias from DB 

     $redirectTo = '/'.$orderAlias; 

     if ($this->attemptLogin($request)) { 
      return $this->sendLoginResponse($request); // to "credentials"... 
     } 

     $this->incrementLoginAttempts($request); 

     return $this->sendFailedLoginResponse($request); 

    } 

    protected function credentials(Request $request) { 

     // here is error 
     return $request->only(REF::forms['loginToOrder']['fieldNames']['orderID'], 
       REF::forms['loginToOrder']['fieldNames']['password']); 
    } 
} 
+0

Sie versuchen, eine ‚Ordnung‘ als ‚Nutzer‘ anmelden? – lagbox

+0

@lagbox, was meinst du? Ich logge mich mit 'Bestellungen' Tabelle, 'ID' bestellen statt 'E-Mail' zu authentifizieren, und ich löschte 'Benutzer' Tabelle. Ich setze die "Bestell-ID" als "$ username" - sie ist für Authentifizierungsmethoden erforderlich (fast alle Methoden von "AuthenticatesUsers" funktionieren mit E-Mail als ID zum Anmelden). Eigentlich möchte ich eine vollständig manuelle Authentifizierung, aber ich weiß nicht, wie ich mich anmelden kann, wenn ich umadressiere (ich dachte darüber nach in [this] (https://stackoverflow.com/questions/47425457/laravel-keep-login-authenticated- Status-manuell) Frage, aber immer noch keine Antworten). –

Antwort

0

Das Modell Sie verwenden möchten die Authenticatable Schnittstelle/Vertrag umzusetzen hat.

Laravel - Docs - Authentication - The Authenticatable Contract

+0

Vielen Dank für die Antwort. Es tut mir leid, aber es gibt kein Beispiel für "Interface Authenticatable", also verstehe ich nicht, wie man es benutzt. Könnten Sie ein Beispiel für die Verwendung von 'Interface Authenticatable' zur Authentifizierung mit '$ orderID' anstelle von E-Mail hinzufügen? –

Verwandte Themen