我有一个相当复杂的应用程序,它使用自定义身份验证中间件。我有一个像这样的路线组:
Route::group(['prefix' => 'auth', 'middleware' => 'auth'], function() {
Route::get('/', function() {
echo 'private';
});
Route::group(['prefix' => 'public'], function() {
Route::get('/', function() {
echo 'public';
});
})
});
现在auth
中间件将重定向所有未经过身份验证的请求。具有auth
前缀的主组已通过身份验证。但是,即使用户未经过身份验证,我也希望可以访问组public
。
所以:
http://example.com/auth < must be authenticated
http://example.com/auth/some-sub-page < must be authenticated
http://example.com/auth/public < no need for authentication
那么有没有办法将'remove-middleware' => 'auth'
之类的东西添加到带有public
前缀的嵌套组中?或者我是否需要重组我的路线组?
答案 0 :(得分:0)
为什么不将auth中间件包装在非公共路由周围?
Route::group(['prefix' => 'auth'], function() {
// routes requiring auth
Route::group(['middleware' => 'auth']) {
Route::get('/', function() {
echo 'private';
});
}
// other routes
Route::group(['prefix' => 'public'], function() {
Route::get('/', function() {
echo 'public';
});
});
});
可能有办法做一个'删除 - 中间件'类型的中间件,但这可能会变得混乱。这似乎是最干净的解决方案。
答案 1 :(得分:0)
您可以在路线上使用 withoutMiddleware
方法。
Route::get('/example')->withoutMiddleware('auth')
您也可以在 withoutMiddleware
Route::group