我已经启动了一个新的Laravel 5.2项目,使用laravel new MyApp并添加了身份验证php 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']);
[...]
});
});
Run Code Online (Sandbox Code Playgroud)
我可以登录很好,但是我遇到了一些非常"时髦"的行为 - 当我尝试注销时(logout通过工匠创建的内置方法),页面会重定向到家,我仍然登录.
更重要的是,虽然几乎所有页面(此处未列出)都按预期工作,但user.add也会在主页上生成302.
请注意,主页是向AuthController声明的$redirectTo,如果这有任何区别
我通过调试栏找到了重定向.想知道该找什么?
小智 16
我遇到了同样的问题,我通过添加带有 accept:'application/json' 的标头解决了它。而且我想我之前检查了源代码,它表明如果您不添加它,它可能会在您使用 auth 中间件时重定向。但我不确定是否是这种情况,我不记得我在哪里找到的。
经过数小时的拔头发,我找到了答案-这很愚蠢。
问题是,该航线user.profile有一个路径user/{uid?},它都匹配user/logout,并user/add作为路径。
它在其他规则之前,并且没有正则表达式或类似内容,因此可以处理路由。
我仍然不知道为什么为该页面生成了302 ,但是发现将其移出AuthController和移入UserController(应该从一开始就应该固定)的行为。
因此,我的路线(经过修改和有效)现在看起来像这样:
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']);
[...]
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34549 次 |
| 最近记录: |