我有这个Laravel 5应用程序。有两个控制器:索引和主页。在索引中,我为尚未登录的用户提供了可见的页面。当用户登录时,他会转到家庭控制器。当然,我希望访客不能在家庭控制器下查看路线。所以我在Home的构造函数中进行了检查。但它重定向回索引,似乎根本不是正确的方式。所以有了这组路线:
Route::group(['prefix' => '/home'], function () {
Route::auth();
Route::get('index', 'HomeController@index');
Route::get('logout', 'HomeController@logout');
});
正如你所看到的,我补充道。
Route::auth();
我认为应该设法拒绝尚未登录的访客访问。尚未登录的用户仍然可以访问该住宅。
如何直接在route.php中描述一组路由(我想是在一个组中)在提供路由之前应该首先经过身份验证?
您是否在控制器中使用此代码?
public function __construct()
{
$this->middleware('auth');
}
您应该添加一个auth
中间件来保护您的home
组:
Route::auth();
Route::group(['middleware' => 'auth'], function() {
Route::group(['prefix' => '/home'], function () {
Route::get('index', 'HomeController@index');
Route::get('logout', 'HomeController@logout');
});
});
你可以看看这个:https://laravel.com/docs/5.2/authentication#protecting-路由
它在Laravel中非常简单,你只需要使用一个Middleware
请参阅此DOC
例如:
Route::get('profile', ['middleware' => 'auth', 'uses' => 'ProfileController@show']);
此配置文件显示路线仅在用户登录时有效。
如果您有多个路由要保护,不受未经身份验证的用户的影响,则使用路由组
Route::group(['prefix' => '/home', 'middleware' => ['auth']], function()
{
// user need to logged in order to access these routes
Route::get('/', function()
{
});
});
- 在kernal.php中,在$routeMiddleware中添加"auth"=>"MyespaceAdmin''Http''Middleware''Authenticate"
-
Authenticate.php在中间件目录中检查以下代码的句柄函数。
if ($this->auth->guest()) { if ($request->ajax()) { return response('Unauthorized.', 401); } else { return redirect()->guest('your login page url'); } }
-
然后在路由或控制器中使用中间件身份验证