只允许某些IP地址在Laravel 5.2中注册用户

Tim*_*ger 11 php laravel-5.2

我试图只允许某些IP地址访问注册路由,但我收到类型错误:

传递给App\Http\Controllers\Auth\AuthController :: showRegistrationForm()的参数1必须是Illuminate\Http\Request的实例,没有给出,在目录\ vendor\laravel\framework\src\Illuminate\Foundation\Auth \中调用第19行注册了Users.php

这是我的showRegistrationForm方法AuthController:

public function showRegistrationForm(Request $request) {
    $ip = $request->ip();

    if ($ip == "148.124.0.1") {
        return redirect("register");
    } else {
        return redirect("home");
    }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道我会怎么做到这一点?

pra*_*dam 42

而是检查控制器,请检查这种方式

php artisan make:middleware IpMiddleware
Run Code Online (Sandbox Code Playgroud)

<?php

namespace App\Http\Middleware;

use Closure;

class IpMiddleware
{

    public function handle($request, Closure $next)
    {
        if ($request->ip() != "192.168.0.155") {
        // here instead of checking a single ip address we can do collection of ips
        //address in constant file and check with in_array function
            return redirect('home');
        }

        return $next($request);
    }

}
Run Code Online (Sandbox Code Playgroud)

然后在类的$ middleware属性中添加新的中间件app/Http/Kernel.php类.

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'ipcheck' => \App\Http\Middleware\IpMiddleware::class,
];
Run Code Online (Sandbox Code Playgroud)

然后将middelware应用于路线

Route::get('/', ['middleware' => ['ipcheck'], function () {
    // your routes here
}]);
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!

  • `'ipcheck'=>\App\Http\Middleware\Ip :: class`,应该是''ipcheck'=>\App\Http\Middleware\IpMiddleware :: class` (2认同)

Ako*_*ert 6

// .env

WHITELIST='192.168.1.1;192.168.1.2'
Run Code Online (Sandbox Code Playgroud)

// 访问.php

whitelist => env('WHITELIST')
Run Code Online (Sandbox Code Playgroud)

// 白名单Middleware.php

class WhitelistMiddleware
{
 /**
  * @param Request $request
  * @param Closure $next
  * @return \Illuminate\Http\RedirectResponse
  * @throws ForbiddenException
  */
   public function handle($request, Closure $next)
   {

     $whitelist = config('access.whitelist');

     $ipAddresses = explode(';', $whitelist);

      if (! in_array($request->ip(), $ipAddresses)) {

        \Log::error('IP address is not whitelisted', ['ip address', $request->ip()]);

        return redirect('home');
     }

     return $next($request);
  }
}
Run Code Online (Sandbox Code Playgroud)