2016-07-24 9 views
3

Ich arbeite an einem Laravel-Projekt. Das Projekt hat einen öffentlichen (nicht authentifizierten Bereich der Site) und einen authentifizierten Bereich (Admin).Wie verwende ich die Route/(index) zweimal für beide angemeldet und abgemeldet?

Ich versuche, die/route zu verwenden, um eine öffentliche Homepage-Ansicht anzuzeigen, und wenn ich dann authentifiziert bin, möchte ich die selbe/route, um die vom Administrator authentifizierte Ansicht anzuzeigen.

Dies ist der Versuch Code:

routes.php

Route::auth(); 

Route::get('/', function() { 
     return view('Public.home'); 
    }); 

Route::group(['middleware' => ['auth']], function() { 

    Route::get('/', function() { 
     return view('Authenticated.home'); 
    }); 
}); 

Problem Wenn ich abgemeldet und versuchen, den/Weg für den Zugriff auf die öffentlichen Controller (Public.home) wird als authentifizierte Route betrachtet (wie sie in der obigen Routengruppe unter der 'auth' Middleware platziert wurde).

Die Middleware-Authentifizierung ist so eingestellt, dass sie auf/auf geschützte (authentifizierte) Routen umgeleitet wird.

Authenticate.php

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Support\Facades\Auth; 

class Authenticate 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @param string|null $guard 
    * @return mixed 
    */ 
    public function handle($request, Closure $next, $guard = null) 
    { 
     if (Auth::guard($guard)->guest()) { 
      if ($request->ajax() || $request->wantsJson()) { 
       return response('Unauthorized.', 401); 
      } 

      return redirect()->guest('/'); 
     } 

     return $next($request); 
    } 
} 

ich verwende Laravel 5.2.

Antwort

3

Es gibt ein paar Möglichkeiten, um dies zu umgehen.

Die erste wäre, Ihre ('/') Route von der auth Middleware auszuschließen und Ihre eigenen zu schreiben, um zu überprüfen, ob sie eingeloggt sind oder nicht und die entsprechende Ansicht basierend darauf zurückgeben.

So etwas wie dies tun würde, den Trick:

public function handle($request, Closure $next) 
{ 
    if (Auth::check()) 
    { 
     //The user is logged in 
     return view('Authenticated.home'); 
    } 

    else 
    { 
     //The user is not logged in 
     return view('Public.home'); 
    } 
} 

Fore weitere Informationen über Ihre eigene Middleware zu schreiben, finden Sie in der Dokumentation für diese.

Alternativ können Sie auch nur die eine Ansicht erstellen ('home') und dann verwenden und if Anweisung, um zu überprüfen, ob sie angemeldet sind oder nicht.

So etwas würde den Trick:

@if (Auth::check()) 
    //User is logged in 
    //HTML that we want to show to authenticated user 
@else 
    //User is not logged in 
    //HTML that we want to show to general public 
@endif 
+0

Danke, arbeitete diese. –