امروز می خواهیم با استفاده از لاراول IP هایی که به وب اپلیکشن ما ورود می کنیم را کنترل کنیم. برای این کار از middleware استفاده می کنیم.پس در CMD خود دستور زیر را اجرا می کنیم تا یک middleware ساخته شود:
php artisan make:middleware IPAddresses
کدهای زیر را به app/Http/Middleware/IPAddresses.php اضافه می کنیم:
class IPAddresses
{
public function handle($request, Closure $next)
{
if ($request->ip() != 'xxx.xxx.xxx.xxx') {
abort(403);
}
return $next($request);
}
}
چند نکته وجود دارد:
شما برای دریافت IP از
$_SERVER[‘REMOTE_ADDR’]
در PHP می توانید استفاده کنید.
شما برای استفاده از کلاس middleware باید آنرا داخل app/Kernel.php اضافه کنید:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
// ... other middleware classes
\App\Http\Middleware\IPAddresses::class,
];
اگر بخواهید middleware را گسترش دهید به شکل زیر می توانید عمل کنید:
namespace App\Http\Middleware;
use Closure;
use Symfony\Component\HttpFoundation\IpUtils;
class RedirectInvalidIPs
{
/**
* List of valid IPs.
*
* @var array
*/
protected $ips = [
'42.60.187.198',
'188.102.29.159',
];
/**
* List of valid IP-ranges.
*
* @var array
*/
protected $ipRanges = [
'12.64.103.24',
];
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
foreach ($request->getClientIps() as $ip) {
if (! $this->isValidIp($ip) && ! $this->isValidIpRange($ip)) {
return redirect('/');
}
}
return $next($request);
}
/**
* Check if the given IP is valid.
*
* @param $ip
* @return bool
*/
protected function isValidIp($ip)
{
return in_array($ip, $this->ips);
}
/**
* Check if the ip is in the given IP-range.
*
* @param $ip
* @return bool
*/
protected function isValidIpRange($ip)
{
return IpUtils::checkIp($ip, $this->ipRanges);
}
}