欢迎各位兄弟 发布技术文章
这里的技术是共享的
使用 php artisan route:list 这个看看, 有可能看到意外的收获
Laravel版本:5.2.29
我一直在尝试过滤对AuthController的一些请求。通常,我只希望login方法由guest执行,而所有其他方法应仅由登录的admin用户执行。
我立即想到将auth中间件分配给AuthController的构造函数,如下所示:
public function __construct() { $this->middleware('auth', ['except' => 'login']); }
它根本没有用。相反,我被迫在路由文件中执行以下操作:
//Route::auth(); Route::get('login', 'Auth\AuthController@showLoginForm'); Route::post('login', 'Auth\AuthController@login'); Route::group(['middleware' => 'auth'], function () { // Authentication Routes... $this->get('logout', 'Auth\AuthController@logout'); // Registration Routes... $this->get('register', 'Auth\AuthController@showRegistrationForm'); $this->post('register', 'Auth\AuthController@register'); // Password Reset Routes... $this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm'); $this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail'); $this->post('password/reset', 'Auth\PasswordController@reset'); });
我不知道为什么第一种方法不起作用。我想念什么?
运行时,
php artisan route:list
您可以看到应用于路由的所有中间件。也许您的路线也有来自某些团体的额外中间件。我将开始在那寻找;)
我确实将代码反转回了第一种方法,并且在您的提示下,我能够观察到确实添加了登录名(帖子)作为例外。但是,login(get)仍在使用auth中间件,因为有一个名为showLoginForm的方法(也是注销),但我忘记在该方法中添加。
因此,这里是解决方法:
public function __construct() { $this->middleware('auth', ['except' => ['login', 'showLoginForm', 'logout']]); }
来自 https://laracasts.com/discuss/channels/laravel/middleware-except-not-working
中间件除外
使用 php artisan route:list 这个看看, 有可能看到意外的收获
Laravel版本:5.2.29
我一直在尝试过滤对AuthController的一些请求。通常,我只希望login方法由guest执行,而所有其他方法应仅由登录的admin用户执行。
我立即想到将auth中间件分配给AuthController的构造函数,如下所示:
public function __construct() { $this->middleware('auth', ['except' => 'login']); }
它根本没有用。相反,我被迫在路由文件中执行以下操作:
//Route::auth(); Route::get('login', 'Auth\AuthController@showLoginForm'); Route::post('login', 'Auth\AuthController@login'); Route::group(['middleware' => 'auth'], function () { // Authentication Routes... $this->get('logout', 'Auth\AuthController@logout'); // Registration Routes... $this->get('register', 'Auth\AuthController@showRegistrationForm'); $this->post('register', 'Auth\AuthController@register'); // Password Reset Routes... $this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm'); $this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail'); $this->post('password/reset', 'Auth\PasswordController@reset'); });
我不知道为什么第一种方法不起作用。我想念什么?