拉拉维尔意外重定向 ( 302 )

2022-08-30 14:46:43

我已经启动了一个新的Laravel 5.2项目,使用,并通过添加了身份验证。这是一个会员制网站,其中第一个用户是种子,并创建其余部分(无需手动创建用户/密码重置/等)。laravel new MyAppphp artisan make:auth

这些是我目前定义的路线:

 Route::group(['middleware' => 'web'], function () {
  // Authentication Routes...
  Route::get( 'user/login',  ['as' => 'user.login',     'uses' => 'Auth\AuthController@showLoginForm']);
  Route::post('user/login',  ['as' => 'user.doLogin',   'uses' => 'Auth\AuthController@login'        ]);

  Route::group(['middleware' => 'auth'], function() {
    // Authenticated user routes
    Route::get( '/', ['as'=>'home', 'uses'=> 'HomeController@index']);
    Route::get( 'user/{uid?}', ['as' => 'user.profile',   'uses' => 'Auth\AuthController@profile' ]);
    Route::get( 'user/logout', ['as' => 'user.logout',    'uses' => 'Auth\AuthController@logout'  ]);
    Route::get( '/user/add',   ['as' => 'user.add',       'uses' => 'Auth\AuthController@showAddUser']);

    [...]
  });
});

我可以很好地登录,但是我遇到了一些非常“时髦”的行为 - 当我尝试注销(通过工匠创建的内置方法)时,该页面会执行302重定向到主页,并且我仍然登录。logout

更重要的是,虽然几乎所有页面(此处未列出)都按预期工作,但user.add也会在主页上生成302。

请注意,主页向 AuthController 声明为 ,如果这有任何区别$redirectTo

我通过调试栏发现了重定向。关于寻找什么的任何想法?


答案 1

我遇到了同样的问题,我通过添加带有 accept:'application/json' 的标头来解决它。我想我之前检查了源代码,这表明如果您不添加此内容,则在使用身份验证中间件时,它可能会重定向。但我不确定情况是否如此,我不记得我在哪里找到这个。


答案 2

经过几个小时的头发拉扯,我找到了我的答案 - 这很愚蠢。

问题是路由有一个路径,并且它同时匹配并且作为路径匹配。user.profileuser/{uid?}user/logoutuser/add

它先于其他方法,并且没有正则表达式或类似方法,它处理路由。

我仍然不知道为什么为该页面生成302,但发现将其移出并进入(从一开始就应该在哪里)修复了行为。AuthControllerUserController

因此,我的(修改和工作)路线现在看起来像这样:

Route::group(['middleware' => 'web'], function () {
  // Authentication Routes...
  Route::get( 'user/login',  ['as' => 'user.login',     'uses' => 'Auth\AuthController@showLoginForm']);
  Route::post('user/login',  ['as' => 'user.doLogin',   'uses' => 'Auth\AuthController@login'        ]);

  Route::group(['middleware' => 'auth'], function() {
    // Authenticated user routes
    Route::get( '/',     ['as'=>'home', 'uses'=> 'HomeController@index']);
    Route::get( '/home', ['as'=>'home', 'uses'=> 'HomeController@home']);
    Route::get( 'user/logout', ['as' => 'user.logout',    'uses' => 'Auth\AuthController@logout'  ]);

    // *** Added /profile/ here to prevent matching with other routes ****
    Route::get( 'user/profile/{uid?}', ['as' => 'user.profile',   'uses' => 'UserController@profile' ]);
    Route::get( '/user/add',           ['as' => 'user.add',       'uses' => 'UserController@showAddUser']);

    [...]
    });
});

推荐