2017-04-25 2 views
0

Ich möchte Benutzer umleiten, wenn nicht authentifiziert, um meine Index-Seite (die der Login-Seite ist)Laravel 5.4 Umleitung auf bestimmte Seite, wenn der Benutzer nicht authentifiziert ist Middleware

Kann nicht scheinen, damit es funktioniert und Ich war wirklich verwirrt mit dem Routing.

Homecontroller

class HomeController extends Controller 
{ 

    /** 
    * Show the application dashboard. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index() 
    { 
     return redirect()->guest('/'); 
    } 
} 

Routing

// Index 
Route::get('/', [ 
    'as' => 'index', 
    'uses' => '[email protected]' 
]); 

Usercontroller

Das Routing als Redirects einen Benutzer-Controller bei Index Funktion sehen, die die unten:

* hat __construct() so verwendet er die Middleware 'Auth'.

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

public function index(){ 

    // If user is logged 
    if(Auth::check()) { 

     // If user has NOT submitted information form redirect there, otherwise to categories 
     if(!Auth::user()->submitted_information) 
      return redirect()->route('information'); 
     else 
      return redirect()->route('categories'); 
    } 
    else 
     return view('index', ['body_class' => 'template-home']); 

} 

handler.php

Und die unauthenticated Funktion innerhalb Middleware von Auth (Ausnahmen/handler.php)

protected function unauthenticated($request, AuthenticationException $exception) 
    { 
     if ($request->expectsJson()) { 
      return response()->json(['error' => 'Unauthenticated.'], 401); 
     } 

     return redirect()->route('index'); 
    } 

Der Fehler, den ich jetzt bekommen, ist die unten:

InvalidArgumentException in UrlGenerator.php line 304: 
Route [index] not defined. 

Dieser Fehler tritt auf, weil die Linie der

return redirect()->route('index'); in der oben unauthenticated Funktion.

Was fehlt mir hier? Wenn Sie weitere Informationen benötigen, zögern Sie nicht zu fragen.

EDIT: Bis jetzt, wenn ich von Usercontroller entfernen die __construct() Methode, und fügen Sie in web.php zu allen Routen, was middleware zu verwenden, es funktioniert.

Zum Beispiel

Route::get('/categories', [ 
    'as' => 'categories', 
    'uses' => '[email protected]' 
])->middleware('auth'); 

Aber ich versuche zu finden, ohne dass die Angabe, welche Middleware zu verwenden, wird es automatisch zu verwenden.

Antwort

2

Ihre Route bauen wie unten Code:

Route::group(['middleware' => ['auth']], function() { 
    // uses 'auth' middleware 
    Route::resource('blog','BlogController'); 
}); 

Strecke :: get ('/ mypage', 'Homecontroller @ mypage');

Ihre Middleware-Klasse Open RedirectIfAuthenticated genannt und dann in Griff fucntion Sie unter Code schreiben:

if (!Auth::check()) { 
    return redirect('/mypage'); // redirect to your specific page which is public for all 
} 

Hoffe, es wird für Sie arbeiten.

1

sollte Ihr Weg wie

// Index

Route::get('/','[email protected]')->name('index); 

see here für mehr über das Routing.

+0

Nein, das hat nicht geholfen..Es hilft, das richtige Routing zu zeigen, aber jetzt gibt es eine Netzwerkschleife, die ständig die "/" –

Verwandte Themen