Un indirizzo IP (Internet Protocol), noto anche come “logical address”, viene fornito dall’internet service provider (ISP) che identifica in modo univoco un sistema sulla rete internet. 

L’indirizzo ip può essere statico o dinamico. In questo specifico contesto, considera che se hai un sito web ad esempio i tuoi client saranno comuni browser che accedono da una connessione casalinga. Molto spesso in questi casi l’ip dei client è dinamico e potrebbe cambiare ad ogni nuova connessione per lo stesso utente.

Perché dovrei aver bisogno di ottenere l’indirizzo ip dei client?

Tracciare un indirizzo ip può essere utile per diversi scopi come ad esempio effettuare il throttling di una api, oppure blacklistare uno specifico ip (o range di ip) in caso di attacco DDoS.

Tracciare un indirizzo IP non solo ti dice dove stanno andando i tuoi dati, ma anche la posizione dell’utente, così da poter controllare se i dati stanno andando da qualche parte non dovrebbe.

Ricorda però che l’indirizzo ip potrebbe essere camuffato e non rispecchiare l’effettiva posizione dell’utente specie nel caso in cui quest’ultimo stia usando una VPN.

Come ottenere l’indirizzo ip di un client in Laravel

Ottenere l’indirizzo ip di un utente in Laravel è molto semplice. E’ sufficiente fare uso della classe Illuminate\Http\Request che contiene un methodo chiamato ip(). 

Ci sono diversi modi per accedere alla classe Request e li elenchiamo di seguito.

Tramite helper

Laravel mette a disposizione diverse funzioni helper, tra cui request(), che restituisce l’istanza della classe Request. Gli helper possono essere usati in qualsiasi parte dell’applicazione.

$ip = request()->ip();

Tramite dependency injection

La dependency injection è la scelta migliore se negli unit test vogliamo creare una mock della request e verificare la funzione con diversi casi.

public function myFunction(Request $request){

     $ip = $request->ip();

}

Tramite facade

La facade mette a disposizione i metodi della classe request in modo statico. Le facade in Laravel includono anche una implementazione di Mockery nel caso si voglia creare una mock come detto prima.

$ip = \Illuminate\Http\Request::ip();

Note finali

Considera che il metodo ip() restituisce l’ip del client in formato stringa, ma potrebbe in alcuni casi restiturire null se per qualche ragione la classe Request non è in grado di rilevare l’ip del client. 

Vedi documentazione: https://laravel.com/api/9.x/Illuminate/Http/Request.html#method_ip

Quindi se vuoi salvare l’ip del client nel database ad esempio, imposterai il campo in cui salvi il client ip come nullable.

Dai un’occhiata ai nostri corsi in aula da remoto, inizia un percorso di formazione che è in grado di svoltare in maniera definitiva la tua carriera di developer!