将Auth中间件应用于所有Laravel路由
当我在所有控制器中应用auth中间件时,除了登录和注册之外,验证所有路由的正确方法是什么?是否有一种方法可以在一个位置应用auth中间件并排除登录、注册路由?您可以在routes.php文件中应用中间件,您需要做的是将所有路由放在一个组中,并添加中间件“auth”(除了已经配置的auth::routes()),例如:将Auth中间件应用于所有Laravel路由,laravel,laravel-5,laravel-routing,laravel-middleware,Laravel,Laravel 5,Laravel Routing,Laravel Middleware,当我在所有控制器中应用auth中间件时,除了登录和注册之外,验证所有路由的正确方法是什么?是否有一种方法可以在一个位置应用auth中间件并排除登录、注册路由?您可以在routes.php文件中应用中间件,您需要做的是将所有路由放在一个组中,并添加中间件“auth”(除了已经配置的auth::routes()),例如: Route::中间件(['first','second'])->组(函数(){ 路由::get(“/”,函数(){ //使用第一个和第二个中间件 }); 路由::get('user
Route::中间件(['first','second'])->组(函数(){
路由::get(“/”,函数(){
//使用第一个和第二个中间件
});
路由::get('user/profile',函数(){
//使用第一个和第二个中间件
});
});
更多信息可以在文档中找到:您可以将所有经过身份验证的路由分组如下,laravel为身份验证和来宾用户提供了默认的中间件
Route::group(['middleware' => ['auth']], function () {
Route::get('home', 'HomeController@index');
Route::post('save-user', 'UserController@saveUser');
Route::put('edit-user', 'UserController@editUser');
});
以上路由名称仅为组成部分,请遵循路由和控制器的正确命名约定。还可以阅读有关中间件和路由的信息通过将中间件添加到
RouteServiceProvider
中的路由映射中,您可以将中间件添加到整个web.php
路由文件中
转到app/Providers/RouteServiceProvider.php
并在mapWebRoutes()
中,将中间件('web')
更改为中间件(['web','auth'))
:
受保护的函数mapWebRoutes()
{
路由::中间件(['web','auth'])
->名称空间($this->namespace)
->组(base_path('routes/web.php');
}
创建新方法mapAuthRoutes()
:
受保护的函数mapauthrouts()
{
路由::中间件('web')
->命名空间('App\Http\Controllers\Auth')
->组(基本路径('routes/auth.php');
}
映射它:
公共功能映射()
{
$this->mapAuthRoutes();//mapWebRoutes();
...
}
在routes
文件夹中创建一个auth.php
文件,然后粘贴以下内容(并删除不需要的内容):
真正的问题-为什么需要添加mapAuthRoutes()?请说明。@quinny您不必创建新函数mapAuthRoutes
,如果愿意,您可以将路由组添加到mapWebRoutes
函数中?只要它被映射,你想怎么做就取决于你自己。如果未映射,它将不会出现在artisan route:list
上,也不会工作。对我来说,这种添加它的方法更干净?:)