如何绕过Laravel 5维护模式的一些IP地址


How to bypass some IP Addresses for Laravel 5 Maintenance Mode

在Laravel 4中,您可以通过以下操作绕过Laravel维护模式(php artisan down)的一些IP地址:

App::down(function()
{
    if ( !in_array(Request::getClientIp(), ['192.168.0.1']))
    {
        return Response::view('maintenance', [], 503);
    }
});

您还可以提供一个配置文件maintenance.php,其中包含所有ip地址的列表,以便在维护模式下访问您的应用程序:

<?php
return [
    /*
    |--------------------------------------------------------------------------
    | Allowed IP Addresses
    |--------------------------------------------------------------------------
    | Include an array of IP addresses or ranges that are allowed access to the app when
    | it is in maintenance mode.
    |
    | Supported formats:
    |
    */
    'allowed_ips' => [
        '10.0.2.2',
        '10.2.*.*',
        '10.0.2.3 - 10.0.2.45',
        '10.0.3.0-10.3.3.3'
    ],
]; 

我的问题是,我如何在Laravel 5中实现这一点

创建新的中间件

<?php
namespace App'Http'Middleware;
use Closure;
use Illuminate'Contracts'Foundation'Application;
use Illuminate'Http'Request;
use Symfony'Component'HttpKernel'Exception'HttpException;

class CheckForMaintenanceMode
{
    protected $request;
    protected $app;

    public function __construct(Application $app, Request $request)
    {
        $this->app = $app;
        $this->request = $request;
    }

    /**
     * Handle an incoming request.
     *
     * @param  'Illuminate'Http'Request  $request
     * @param  'Closure  $next
     * @return mixed
     */

    public function handle($request, Closure $next)
    {
        if ($this->app->isDownForMaintenance() &&
            !in_array($this->request->getClientIp(), ['::1','another_IP']))
        {
            throw new HttpException(503);
        }

        return $next($request);
    }
}

'::1'是您自己的IP,假设您在localhost中,如果没有指定您的IP。您可以排除阵列中的多个IP。check在Laravel 5 中排除维护模式下的IP地址(php artisan down)