2016-11-05 141 views
0

,我使用的是中間件,以驗證用戶登錄後才能訪問某些網頁...Laravel的5.3認證不工作在我Laravel 5.3認證

我現在面臨的問題是,闕中間件ALWAYS重定向到登錄頁面,即使我只是沒有登錄?

我的路線:

Route::get('/', '[email protected]'); 
Route::get('/produtos', '[email protected]'); 
Route::get('/produtos/mostra/{id}', '[email protected]'); 
Route::get('/produtos/novo', '[email protected]'); 
Route::post('/produtos/adiciona', '[email protected]'); 
Route::get('produtos/lista-json', '[email protected]'); 
Route::get('/produtos/remove/{id}', '[email protected]'); 
Auth::routes(); 
Route::get('/home', '[email protected]'); 
Route::get('/login', '[email protected]'); 
Route::post('/login', '[email protected]'); 

我的LoginController

class LoginController extends Controller 
{ 
    public function form() { 
     return view('form_login'); 
    } 

    public function login() { 
     // Credenciais (email e senha) 
     $credenciais = Request::only('email', 'password'); 

     // Login 
     if (Auth::attempt($credenciais)) { // caso as credenciais sejam aceitas, retorna true 
      return 'Usuário ' . Auth::user()->name . ' logado com sucesso'; 
     } 
     else { 
      return 'Usuário não existe'; 
     } 

    } 
} 

我ProdutoController

class ProdutoController extends Controller 
    { 
     public function __construct() 
     { 
      $this->middleware('Autorizador'); 
     } 

     public function lista() 
     { 

      $produtos = Produto::all(); 

      return view('produto/listagem')->with('produtos', $produtos); 
     } 
    } 

我的內核:

class Kernel extends HttpKernel 
{ 
    /** 
    * The application's global HTTP middleware stack. 
    * 
    * These middleware are run during every request to your application. 
    * 
    * @var array 
    */ 
    protected $middleware = [ 
     \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
     \App\Http\Middleware\Autorizador::class, 
    ]; 

    /** 
    * The application's route middleware groups. 
    * 
    * @var array 
    */ 
    protected $middlewareGroups = [ 
     'web' => [ 
      \App\Http\Middleware\EncryptCookies::class, 
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
      \Illuminate\Session\Middleware\StartSession::class, 
      \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
      \App\Http\Middleware\VerifyCsrfToken::class, 
      \Illuminate\Routing\Middleware\SubstituteBindings::class, 
     ], 

     'api' => [ 
      'throttle:60,1', 
      'bindings', 
     ], 
    ]; 

    /** 
    * The application's route middleware. 
    * 
    * These middleware may be assigned to groups or used individually. 
    * 
    * @var array 
    */ 
    protected $routeMiddleware = [ 
     'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 
     'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
     'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 
     'can' => \Illuminate\Auth\Middleware\Authorize::class, 
     'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
     'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 
    ]; 
} 

我中間件:

class Autorizador 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) // next é o código que será executado em seguida 
    { 

     if (!$request->is('login') && Auth::guest()) { 
      return redirect('/login'); 
     } 
     return $next($request); 
    } 
} 

當我登錄時,我收到消息告訴我,在日誌中是全成和infoming我是登錄用戶的名字,但是,當我嘗試訪問我的產品列表時,我再次被重定向到登錄表單...

有什麼建議嗎?

回答

0

我建議你在Kernel.php添加middleware$routeMiddleware而不是$middleware爲:

Kernel.php

class Kernel extends HttpKernel 
{ 
    /** 
    * The application's global HTTP middleware stack. 
    * 
    * These middleware are run during every request to your application. 
    * 
    * @var array 
    */ 
    protected $middleware = [ 
     \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
    ]; 

    /** 
    * The application's route middleware groups. 
    * 
    * @var array 
    */ 
    protected $middlewareGroups = [ 
     'web' => [ 
      \App\Http\Middleware\EncryptCookies::class, 
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
      \Illuminate\Session\Middleware\StartSession::class, 
      \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
      \App\Http\Middleware\VerifyCsrfToken::class, 
      \Illuminate\Routing\Middleware\SubstituteBindings::class, 
     ], 

     'api' => [ 
      'throttle:60,1', 
      'bindings', 
     ], 
    ]; 

    /** 
    * The application's route middleware. 
    * 
    * These middleware may be assigned to groups or used individually. 
    * 
    * @var array 
    */ 
    protected $routeMiddleware = [ 
     'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 
     'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
     'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 
     'can' => \Illuminate\Auth\Middleware\Authorize::class, 
     'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
     'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 
     'autorizador' => \App\Http\Middleware\Autorizador::class, 
    ]; 
} 

而在你ProdutoController.php使用它作爲:

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