如何设置Laravel 5 Middleware auth?

时间:2016-05-30 09:54:32

标签: laravel laravel-5.2

我在项目中使用Larave 5。在我的项目中,我正在使用laravel default auth,它使用此命令php artisan make:auth。我在我的route.php中设置了中间件,如图所示

    Route::group(['middleware' => 'web'], function () {

    // Authentication Routes...
    Route::auth();    
    Route::get('/', 'Auth\AuthController@getLogin');
    Route::post('auth/login', 'Auth\AuthController@postLogin');
    Route::get('auth/logout', 'Auth\AuthController@getLogout');

    // Admin Roles Routes...
    Route::get('admin/roles', 'AdminController@showRoles');
});

现在我的问题是,如果我的用户注销并点击浏览器后退按钮用户登录,用户可以访问,如注销后添加,编辑,删除视图。那我怎么能处理这种情况呢。请帮助我想一些我错过的代码。

3 个答案:

答案 0 :(得分:2)

首先,您的Route :: auth()已经具有登录和注销功能,如果您在终端中运行'php artisan route:list',您可以看到哪些路线可用等。

其次,您可以为管理员创建如下所示的组:

Route::group(['middleware' => 'web'], function () {

    // Authentication Routes...
    Route::auth();    

    // Admin Roles Routes...
    Route::group(['prefix'=>'admin', 'middleware'=>'auth'], function() {
        Route::get('roles', 'AdminController@showRoles');
    });
});

我希望这适合你;)

顺便说一下,Laravel文档会告诉你很多......所以一定要先看一下;)

答案 1 :(得分:1)

首先,您不需要应用已web已应用于路线的RouteServiceProvider中间件,请参阅https://laravel.com/docs/5.2/middleware#registering-middleware

其次,当使用Route:auth()时,它是:

的快捷方式
$this->get('login', 'Auth\AuthController@showLoginForm');
$this->post('login', 'Auth\AuthController@login');
$this->get('logout', 'Auth\AuthController@logout');

$this->get('register', 'Auth\AuthController@showRegistrationForm');
$this->post('register', 'Auth\AuthController@register');

$this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
$this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
$this->post('password/reset', 'Auth\PasswordController@reset');

所以你不需要定义这些路线:

Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');

最后,为什么要将登录信息放在主页上?

Route::get('/', 'Auth\AuthController@getLogin');

这个例子应该可行:

Route::group(['middleware' => 'auth'], function () {
    Route::get('/', function () {
        return 'Hello! You are logged in.';
    });

    // Admin Roles Routes...
    Route::get('admin/roles', 'AdminController@showRoles');
});

Route::auth();

如果未经身份验证的用户尝试访问您的主页http://yoursite.comhttp://yoursite.com/admin/roles,上述路由会将用户重定向到http://yoursite.com/login,因为这些页面受auth中间件保护

答案 2 :(得分:0)

@Rick回答的补充。

您也可以在控制器的__construct()函数中手动设置中间件。

示例:

// SomeController.php

public function __construct()
{

    $this->middleware('auth');

}

Documentation