我试图只允许某些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)
我希望这有帮助!
// .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)