2017-06-01 1 views
0

Grundsätzlich ist dies mein __construct meines Controllers. Wenn nicht angemeldete Benutzer versuchen, auf die Routen in diesem Controller zuzugreifen, wird er grundsätzlich an die Route login weitergeleitet. So weit, so gut - wenn der Zustand funktioniert, Redirect funktioniert, Route funktioniert.Laravel 5.4 If-Anweisung funktioniert nicht in __construct()

Also die nächst ich versuche, zu überprüfen, ob Benutzer Zugriff Token gültig ist und wenn es nicht ist werde ich ihn zu Abmelde Route umleiten - mein Beispiel zu vereinfachen ich dies nicht tun, sondern überprüfe ich, wenn $ test_var gleich 1 und umleiten zu login, da wir diesen Routennamen bereits als funktionierend kennen.

Weder erste if ($ test_var == 1), nicht zweite if (test_var $ == 1) Auslöser - es gibt keine Umleitung oder sterben.

Ich habe sogar versucht , wenn (1 == 1) ..

ich auch versucht:

if(isset($this->userCredentials)) 
     return redirect('login'); 

und es auslöst noch nicht. Es ist wirklich seltsam, als ob ich nicht zuerst angemeldet bin if (isset ... arbeitet und leitet, aber dieses Stück Code ist nichts zu tun, wenn ich angemeldet bin:

Sieht aus wie die Wenn obviosly ist das Problem, aber dies Wenn über Quantentheorie ..

Dies ist der vollständige Code des Konstrukts.

namespace App\Http\Controllers; 

use Input; 
use Session; 
use Auth; 
use Redirect; 

class stackoverflowController extends ConnectionController 
{ 

public function __construct() 
{ 
    $this->middleware('auth'); 


    $this->userCredentials = Session::get('userCredentials'); 


    if(!isset($this->userCredentials)) 
     return redirect('login'); 

    $test_var = 1; 

    if($test_var == 1) 
     return redirect('login'); 

    if($test_var == 1) 
     die(1); 

    if(1 == 1) 
     die(1); 
} 

Antwort

1

ich denke, wenn statment Werke Problem in Redirect wird zumindest in L4 .2 Ich hatte das selbe Problem, nur Redirect funktioniert nicht

In Laravel 4.2 Werke send(), aber ich tat es in L5 noch verwenden, so pleasy versuchen, ob es funktioniert:

return redirect('login')->send(); 
+0

Vielen Dank. Es hat so funktioniert. Ich kann mir immer noch nicht erklären, warum irgendwo redirect funktioniert ohne send(). –

+1

Problem ist, dass die Umleitung im Konstruktor aufgerufen wird. Und es ist irgendwie Umleitung Aktion umschreiben. –

+2

@ АтанасАтанасов Denken Sie daran, dass jeder Wert, den Sie vom Konstruktor zurückgeben, ignoriert wird. Dies funktioniert nur, weil die 'send'-Methode das Skript nach dem Senden des Redirect-Headers wahrscheinlich beendet. – Furgas

1

Ihre Sitzung nicht geladen werden. Bearbeiten Sie Ihre Controller-__construct zu

$this->middleware(function ($request, $next) { 
    $this->userCredentials = Session::get('userCredentials'); 

    if(!isset($this->userCredentials)) 
    return redirect('login'); 

    $test_var = 1; 

    if($test_var == 1) 
    return redirect('login'); 

    if($test_var == 1) 
    die(1); 

    if(1 == 1) 
    die(1); 

    return $next($request); 
}); 

oder ändern Sie Ihre App \ Http \ Kernel.php zu

protected $middleware = [ 
    ... 
    \Illuminate\Session\Middleware\StartSession::class, 
]; 
0

Name Geben Sie Ihren Login-Route als login dann versuchen Sie dies:

Redirect() -> Route ('Anmeldung');

+0

Das Problem ist nicht die Weiterleitung als Wenn Benutzer nicht angemeldet ist, leitet es um. Wenn der Benutzer angemeldet ist, funktioniert Next If nicht. Als wären sie gar nicht da. –

Verwandte Themen