2016-08-18 5 views
0

td; dr: Ich sende eine JSON-Antwort an die Authentifizierungsanfrage, aber der Session-Cookie fehlt.Laravel 5.2 Auth sendet kein Cookie

Ich benutze eine Login-Methode ähnlich der Illuminate\Foundation\Auth\AuthenticatesUsers eins. In meinem Fall wird die Antwort im JSON-Format und keine Ansicht gerendert. Hier ist der Controller-Code:

class DashboardController extends Controller 
{ 
    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    protected $guard = 'web'; 

    public function login(LoginRequest $request) 
    { 
     $throttles = $this->isUsingThrottlesLoginsTrait(); 

     if ($throttles && $lockedOut = $this->hasTooManyLoginAttempts($request)) { 
      $this->fireLockoutEvent($request); 

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

     $credentials = $this->getCredentials($request); 
     if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) { 
      Auth::user()->incrementLoginCounter(); 
      return $this->handleUserWasAuthenticated($request, $throttles); 
     } 

     if ($throttles && ! $lockedOut) { 
      $this->incrementLoginAttempts($request); 
     } 
     return $this->sendFailedLoginResponse($request); 
    } 
} 

Es ist im Grunde die gleiche Sache wie die Eigenschaft von Laravel.

Das Problem: Es wird kein Cookie mit der Antwort gesendet. Hier

ist das, was ich weiß:

  • die remember_token Spalte der Benutzertabelle in der Datenbank wird immer richtig eingestellt
  • i Cookies manuell mit response()-> ... ->cookie('name', 'value')
  • die manuell eingestellt Cookies können, sind in der Antwort richtig gesendet
  • der Guard-Treiber ist auf session eingestellt, der Anbieter ist auf die App\User Klasse
  • festgelegt
  • der Session-Treiber ist file und Config ist die Standard-Laravel-Konfiguration
  • Die Web-Middleware ist die gleiche wie Standard, Csrf-Middleware ist auf diesem Endpunkt ausgeschaltet.

Was denn ich bin die Hoffnung: Im besten Fall - eine Lösung für das Problem oder irgendwelche tipps und Ideen auf, was ich, um herauszufinden, testen konnte, warum es nicht funktioniert.

Antwort

0

Ich fand die Lösung für mein Problem selbst und es war eine ziemlich seltsame Sache. Ich habe das Laravel-Repository auf github geöffnet und alle App-Dateien durchgelesen, die auf die Anfrage geladen und mit meiner lokalen Version verglichen wurden. Das bedeutet Router, Controller, Middlewares, Provider usw.

Der RouteServiceProvider fehlte eine ganze Methode. Das führte dazu, dass mir die App mitteilte, dass die Web-Middleware angewendet wurde, obwohl sie es nicht war.

Vielleicht war dies, weil der vorherige Entwickler Laravel auf die neueste Version aktualisiert und die Arbeit nicht richtig gemacht hat. Vielleicht war es ein Git-Merge, der es vermasselt hat.

Der Punkt ist - manchmal ist es gut, nur alle Dateien Zeile für Zeile durchlaufen und vergleichen Sie es mit einer funktionierenden Version :)