2017-08-03 76 views
1

在控制器的一個具體方法我有中間件Auth是在App\Http\Middleware\中間件在Laravel

在我的內核我加入他想:

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, 
     'Groups' => \App\Http\Middleware\Groups::class, 
     'Auth' => \App\Http\Middleware\Auth::class, 
    ]; 

該中間件包含

<?php 

namespace App\Http\Middleware; 

use Closure; 

class Auth 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if(!auth()->check()) 
     { 
      return abort(404); 
     } 
     return $next($request); 
    } 
} 

而且在我的控制器方法中,我使用

$this->middleware('Auth');

但是這根本不起作用。

而當我把我的'Auth' => \App\Http\Middleware\Auth::class,並將它放入protected $middlewareGroups就像\App\Http\Middleware\Auth::class,它的工作原理。但是對於每一個頁面。所以當我沒有記錄它所有的時間abort404。

這裏有什麼問題? 我看不到,它看起來很好。

但這中間件不適合這種方法中,我有$this->middleware('Auth');

我沒有登錄,但頁面顯示爲正常工作。

而且應該abort404解僱因爲我不是在登錄

是什麼讓我錯了嗎?

+1

您已經擁有了從股票Laravel中建立的那種中間件,您想仔細看看股票'auth'和'guest'中間件,它們是'$ routeMiddleware'數組中的項目0和4。 – Kyslik

+0

@Kyslik這個工程,當我把它放入構造函數,爲什麼我不能直接放入方法? –

回答

4

,你必須在你添加中間件$middlewareGroupsdoc

開箱進行了解釋,在網絡中間件組自動應用到 您的路線由/ web.php文件的問題RouteServiceProvider。

如果你想在cotroller只是一個動作中間件可以綁定中間件路線:

Route::get('yourRout', '[email protected]')->middleware('auth'); 

或者你可以在你的控制器構造函數中添加:

public function __construct() 
{ 
    $this->middleware('auth', ['only' => ['edit']]); 
} 
+0

但我有資源路由'路線::資源('uzytkownik','UsersController');'我需要將它分配給行動UsersController @編輯 –

+0

檢查我的更新;) – Maraboc

+0

所以是不可能分配中間件路由中資源控制器路由的一種方法? –