Laravel Geo-Restrict Middleware
Bu proje, Laravel framework'ü kullanarak belirli bir coğrafi bölgeye veya ülkeye göre içerik erişimini sınırlamak amacıyla bir middleware uygulamasını içermektedir. Örneğin, kullanıcıların IP adreslerine dayalı olarak konum bilgilerini tespit ediyor ve yalnızca belirlenen ülkelerden gelen kullanıcılara erişim izni veriyor. Eğer kullanıcı izin verilen ülkelerde değilse, özel bir hata sayfasına yönlendirilir.
Bu proje, aşağıdaki özellikleri içerir:
- Kullanıcının IP adresine göre ülkesini tespit etme.
- Sadece izin verilen ülkelerden gelen kullanıcıların
erişmesine izin verme.
- Diğer durumlarda kullanıcıları özel bir hata
sayfasına yönlendirme.
- Laravel middleware yapısını kullanarak IP tabanlı
konum denetimi sağlama.
- Hata sayfası için basit bir tasarım.
1. IP Tabanlı Konum Bilgisi Elde Etme
- Projede IP tabanlı konum tespiti için `stevebauman/location`
paketi kullanıldı.
- Paketi yüklemek için:
composer require stevebauman/location
- Belirli bir IP'nin ülkesini kontrol eden ve uygun olmayan durumlarda kullanıcıyı hata sayfasına yönlendiren bir middleware oluşturduk:
php artisan make:middleware GeoRestriction
Middleware içinde şu işlemler yapılmaktadır:
- Kullanıcının IP adresi alınır.
- IP'ye göre kullanıcı konumu tespit edilir.
- Kullanıcının bulunduğu ülke, izin verilen ülkeler
listesiyle karşılaştırılır.
- Erişim izni yoksa özel hata sayfasına yönlendirilir.
- Laravel 11 ile artık kernel.php dosyası olmadığı için oluşturduğumuz middlewareyi bootstrap içerisindeki app.php içerisinde tanımlıyoruz.
└── bootstrap
└── app.php- Middleware, belirli rotalarda uygulanmak üzere web.php dosyasında tanımlandı. Ayrıca, özel hata sayfası için bir rota oluşturuldu:
5. Hata Sayfası
- Hata durumunda kullanıcıların yönlendirileceği bir hata sayfası tasarlandı.
6. Konum Testi
- Türkiye için örnek bir IP (88.255.216.0) kullanılarak middleware içinde testler gerçekleştirildi.
├── app
│ └── Http
│ └── Middleware
│ └── GeoRestriction.php
├── resources
│ └── views
│ ├── welcome.blade.php
│ └── 403.blade.php
│ └── 404.blade.php
└── routes
└── web.php