2016-11-05 152 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'); 
}