【问题标题】:Laravel redirect inside of middleware?Laravel 在中间件内部重定向?
【发布时间】:2017-04-22 10:18:55
【问题描述】:

我通过登录有一个中间件检查,用户有多少游戏,如果用户有多个游戏,我想显示另一个视图,但如果用户有多个游戏,我每次重定向错误:

以防万一$assigned_games > 1

$games = Auth::user()->userGames;
$assigned_games = count($games);

if ($assigned_games == 1) {
    return $next($request);
} elseif ($assigned_games > 1) {
    return redirect()->route('games.board');
} elseif ($assigned_games < 1) {
    echo "no game bought";
    exit;
}

我也尝试过只使用return route('games.board'),但它不起作用。

如何在此处设置正确的重定向?

【问题讨论】:

  • 你得到什么错误?
  • @AlexeyMezenin“重定向你太多次了。”
  • 代码是正确的,但确保路由 games.board 不使用此中间件,因为如果 games.board 路由使用该中间件,它将进入重定向循环,因此您重定向的路由不应再次重定向.
  • @Sam 是的,它在里面,是否可以在那里创建一个异常?
  • 你应该在中间件中抛出异常,因为中间件是先执行的,然后是控制器方法。

标签: laravel laravel-5 laravel-routing laravel-middleware


【解决方案1】:

如果你的路由都在中间件中,那么你应该检查当前路由,如果它与你重定向的一样,你不应该重定向以避免重定向循环

$games = Auth::user()->userGames;
$assigned_games = count($games);

if ($assigned_games == 1) {
    return $next($request);
} elseif ($assigned_games > 1 && \Route::currentRouteName() != 'games.board') {
    return redirect()->route('games.board');
} elseif ($assigned_games < 1) {
    echo "no game bought";
    exit;
} else {
    return $next($request);
}

【讨论】:

  • 它可以,但是我现在总是重定向到这个页面,是否可以仅通过登录来限制这个请求?
  • 在您的路由中的此中间件之前添加身份验证中间件。所以对于前。 Route::group(['middleware' => ['auth', 'yourmiddleware']], function(){});然后它只有在登录后才会进入你的中间件。
猜你喜欢
  • 2017-04-19
  • 2017-04-05
  • 2018-04-24
  • 2020-06-06
  • 1970-01-01
  • 2017-11-21
  • 2018-04-14
  • 2020-02-19
  • 2019-11-20
相关资源
最近更新 更多