2016-07-24 61 views
3

我正在致力於Laravel項目。該項目有一個公共(未認證的網站部分)和一個認證部分(管理員)。如何使用/(索引)路線兩次登錄和註銷?

我正在嘗試使用/路徑來顯示公共主頁視圖,然後當進行身份驗證時,我想要相同的/路線來顯示管理員身份驗證的視圖。

這是試圖代碼:

routes.php文件

Route::auth(); 

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

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

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

問題 當我註銷並嘗試訪問/路線,公共控制器(Public.home )被認爲是認證的路由(如上面的路由組中的'auth'中間件下)。

中間件身份驗證設置爲重定向到/訪問任何受保護(經過身份驗證的)路由時。

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); 
    } 
} 
我使用Laravel 5.2

回答

3

有幾種方法可以解決這個問題。

第一種方法是從auth中間件中排除您的('/')路由,並編寫自己的路由以檢查它們是否已登錄並根據該路徑返回適當的視圖。

像這樣的事情會做的伎倆:編寫你自己的中間件

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'); 
    } 
} 

富勒更多信息,請參閱本的文檔。

或者,您可以創建一個視圖('home'),然後使用和if語句來檢查它們是否已登錄。

像這樣的事情會做的伎倆:

@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

謝謝你,這個工作。 –