首页 文章

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

提问于
浏览
9

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

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

这是 AuthController 中的 showRegistrationForm 方法:

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

    if ($ip == "148.124.0.1") {
        return redirect("register");
    } else {
        return redirect("home");
    }
}

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

1 回答

  • 30

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

    php artisan make:middleware IpMiddleware
    

    <?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);
        }
    
    }
    

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

    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,
    ];
    

    然后将middelware应用于路线

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

    我希望这有帮助!

相关问题