Laravel 5拒绝非授权用户的路由


Laravel 5 deny route for non auth users

我有这个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()
    {
    });
});
  1. 在kernal.php中,在$routeMiddleware中添加"auth"=>"MyespaceAdmin''Http''Middleware''Authenticate"
  2. Authenticate.php在中间件目录中检查以下代码的句柄函数。

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