【问题标题】:Laravel route groups lead to redirect loopLaravel 路由组导致重定向循环
【发布时间】:2014-09-11 02:38:05
【问题描述】:

各位开发者,

我在 laravel 路由方面有点挣扎。我只是构建了登录代码,登录似乎可以正常工作。但是,当我被重定向到“/”时,我最终会得到一个重定向循环。

当访客默认 url = "/" 并且经过身份验证时默认 url 也 = "/",所以我猜有些东西不是我想要的那样工作。

相关路由代码如下:

Route::group(["before" => "guest"], function() {
    Route::any("/", [
        "as"    => "home/splash",
        "uses"  => "HomeController@showSplash"
    ]);
});

Route::group(["before" => "auth"], function() {
    Route::any("/", [
        "as"    => "home/dashboard",
        "uses"  => "HomeController@showDashboard"
    ]);
});

当我删除之前的身份验证组时,它会加载启动页面。例如,当我将“auth”之前的名称更改为“auth5”时​​,它会加载仪表板..但是 auth5 没有在我的代码中的任何地方进行编程..所以要么我完全不知道这些路由组是如何应该工作,或者我做错了什么愚蠢的事情:p

最后但同样重要的是,我的身份验证过滤器也重定向到“/”

问候,

手球

更新 =>

/* GUESTS GROUP */
Route::group(["before" => "guest"], function() {

Route::any("/splash", [
    "as"    => "home/splash",
    "uses"  => "HomeController@showSplash"
]);


/* AUTHENTICATED USERS GROUP */
Route::group(['before' => 'auth'], function() {

Route::any("/dashboard", [
    "as"    => "home/dashboard",
    "uses"  => "HomeController@showDashboard"
]);

这可行..但现在我的网站无法再以“/”的形式访问。由于显而易见的原因,这令人沮丧..

当我在 before => 来宾组中添加这条路线时:

Route::any("/", [
    "as"    => "home/home",
    "uses"  => "HomeController@showSplash"
]);

它直接回到重定向循环。我的过滤器如下所示:

Route::filter('auth', function()
{
    if (Auth::guest())
    {
        if (Request::ajax())
        {
            return Response::make('Unauthorized', 401);
        }
        else
        {
            return Redirect::guest('/splash');
        }
    }
});

Route::filter('guest', function()
{
    if (Auth::check()) return Redirect::to('/');
});

我真的错过了一些明显的东西:)

【问题讨论】:

  • 您可能还需要修改您的 filters.php。
  • @delmadord 正如我所说,我的身份验证过滤器已经重定向到“/”:p
  • 您可以发布您的身份验证和访客过滤器代码
  • 小更新,我认为它现在进入我的路由文件->它看到“之前”=>“auth”,运行重定向到“/”的过滤器代码,他返回它看到"之前" => "auth" 再次运行过滤器代码.. 等认为这是导致循环:)
  • 只需将 auth filter 重定向到登录页面而不是 /

标签: loops redirect laravel laravel-routing


【解决方案1】:

只需将身份验证过滤器重定向到登录页面而不是'/'

【讨论】:

  • 我更新了我原来的帖子,我还在挣扎:(
  • 现在我不确定你在做什么。 guest 过滤器用于保护已登录用户的登录路由。
  • 好吧,目标是相对简单的。我想将“/”作为我的默认主页.. 但我无法让它工作:)
  • 您的问题过于臃肿 - 重新格式化并确保包含过滤器以及实际路由,其中​​包含 /splashdashboard 的哪个路由应该做什么的信息。
【解决方案2】:

长话短说,这些过滤器很烦人,在执行 http 请求时,您可以选择路由.. 或者您会得到 404。就这么简单!

if (Auth::guest()) {
    << Routes for guests go here >>
} else {
    << Routes when logged in go here >>
}

故事结束!

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2015-11-09
    • 2021-12-23
    • 1970-01-01
    • 2018-05-28
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多