我有这个laraval 5 app。有2个控制器:索引和家庭。 在索引中,我已经为尚未登录的用户显示了页面。当用户登录时,他会转到家庭控制器。 当然我希望访客无法查看家庭控制器下的路线。 所以我在Home的构造函数中放了一个支票。但它重定向回索引,似乎根本不是正确的方法。 所以有这组路线:
Route::group(['prefix' => '/home'], function () {
Route::auth();
Route::get('index', 'HomeController@index');
Route::get('logout', 'HomeController@logout');
});
如您所见,我添加了
Route::auth();
我认为应该设法拒绝访问尚未登录的访问者。但事实并非如此。 对于尚未登录的用户,仍然可以访问该住宅。
直接在route.php中描述的是,在服务路由之前,一堆路由(我想在一个组内部)应首先通过身份验证?
答案 0 :(得分:2)
您应该添加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-routes
答案 1 :(得分:1)
您是否在控制器中使用此代码?
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
<nav class="navbar navbar-inverse navbar-fixed-top" id="my-navbar">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="https://www.hemsleyfraser.co.uk/" class="navbar-brand">Hemsley Fraser</a>
</div>
<div class="collapse navbar-collapse" id="navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="home.html">Topics</a></li>
<li><a href="">About</a></li>
<li><a href="">Contact Us</a></li>
</ul>
</div>
</div>
答案 2 :(得分:1)
在Laravel中非常简单,只需要使用一个Middleware
请参阅此DOC
EX:
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()
{
});
});
答案 3 :(得分:0)
中间件目录中的Authenticate.php检查以下代码的句柄函数。
if ($this->auth->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('your login page url');
}
}
然后在路线或控制器中使用中间件身份验证