Laravel 5拒绝非auth用户的路由

时间:2016-07-19 10:36:27

标签: php laravel

我有这个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中描述的是,在服务路由之前,一堆路由(我想在一个组内部)应首先通过身份验证?

4 个答案:

答案 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)

  1. 在kernal.php中添加&#39; auth&#39; =&GT; &#39; MyespaceAdmin \ HTTP \中间件\身份验证&#39;在$ routeMiddleware。
  2. 中间件目录中的Authenticate.php检查以下代码的句柄函数。

    if ($this->auth->guest()) {
        if ($request->ajax()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('your login page url');
        }
    }
    
  3. 然后在路线或控制器中使用中间件身份验证