2017-08-03 79 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

所以是不可能分配中间件路由中资源控制器路由的一种方法? –