如何编写全局路由滤波器中间件以重定向用户



我在Laravel 5.3中了解了他们对中间件的弃用过滤器。这是在这里讨论的。

我正在尝试做类似的事情,但是我不是要定义一个路由模式,而是要定义一个"过滤器",在该模式中,我检查了在某个条件的用户中记录的用户,并在不满足此情况的情况下重定向。我希望该过滤器全球应用于应用程序。

我该怎么做?我只看到路由::模式方法的文档,但是route :: filter不存在。

您可以使用这样的Laravel Middlewares:

要创建一个新的中间件,请使用Make:Minderware Artisan命令:

php artisan make:middleware CheckUserAge

,您的CheckUserAge.php类应该看起来像:

<?php
namespace AppHttpMiddleware;
use Closure;
class CheckUserAge
{
  /**
   * Handle an incoming request.
   *
   * @param  IlluminateHttpRequest  $request
   * @param  Closure  $next
   * @return mixed
   */
  public function handle($request, Closure $next)
  {
    if (auth()->user->age <= 20) {
        return redirect('home');
    }
    return $next($request);
  }
}

如果您希望中间件在每个HTTP请求期间运行到您的应用程序,请在app/Http/Kernel.php类的$middleware属性中列出中间件类。

// Within AppHttpKernel Class...
protected $routeMiddleware = [
  'auth' => IlluminateAuthMiddlewareAuthenticate::class,
  'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
  'bindings' => IlluminateRoutingMiddlewareSubstituteBindings::class,
  'can' => IlluminateAuthMiddlewareAuthorize::class,
  'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
  'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class,
  // insert your middleware here <--------------
  'checkUserAge' => AppHttpMiddlewareCheckUserAge::class,
];

开箱即用,Web中间件组由RouteServiceProvider自动应用于您的routes/web.php文件。

protected $middlewareGroups = [
  'web' => [
      AppHttpMiddlewareEncryptCookies::class,
      IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
      IlluminateSessionMiddlewareStartSession::class,
      IlluminateViewMiddlewareShareErrorsFromSession::class,
      AppHttpMiddlewareVerifyCsrfToken::class,
      IlluminateRoutingMiddlewareSubstituteBindings::class,
      AppHttpMiddlewareCheckUserAge::class, // <------- add here too
  ],
];

查看有关Laravel中的中间Wares的更多信息

希望这会有所帮助!

最新更新