Salvare adrese IP - Laravel

laravel

(Andreiasi Marian) #1

Salutări, am un script în Laravel și aș dorii ca la fiecare utilizator în parte să salvez toate adresele IP cu care acesta s-a logat și ulterior să le afișez în panoul de administrare, unde să le pot vedea cu Last login time și last login ip.

Sunt începător cu Laravel.


Contorizare număr click-uri și salvare adresă ip
(Floki) #2
Request::ip();

sau cu helper-ul

request()->ip();

DAR: atenție la GDPR! Nu poți stoca adresa IP fără consent decât în log-ul serverului, și acolo pentru o perioadă limitată.


(Andreiasi Marian) #3

Știu că cer mult, dar cum aș putea implementa treaba asta în mod direct, având sistemul de login de la Laravel?

Ceva de genul: https://laraveldaily.com/save-users-last-login-time-ip-address/


(Andrei Neamțu) #4

Inregistrezi un event listener pentru successful login unde salvezi ipul intr-o tabela sau unde le salvezi tu.

https://laravel.com/docs/5.7/authentication#events

Iti trebuie asta

'Illuminate\Auth\Events\Login' => [
        'App\Listeners\LogSuccessfulLogin',
    ],

(Andreiasi Marian) #5


Am găsit tutorialul ăsta, să vedem ce rezolv :slight_smile: Merci fain băieți!


(Andreiasi Marian) #6

Am rezolvat o mare parte din problemă, acum pot extrage adresa IP și o pot salva în baza de date, dar, dacă utilizatorul se conectează pe altă rețea și are o altă adresă IP, cum aș putea salva fiecare adresă IP în parte și ulterior să le afișez pe toate în panoul de administrare.
De exemplu: user x: IP Address 1 - 1.01.2019
IP Address 2 - 2.01.2019
IP Address 3 - 3.01.2019


(Marian Popescu) #7

Cum stochezi adresa IP? În coloană tip text sau varchar?
Ori faci o altă tabela ip_users cu coloane user_id, ip_address, timestamp, ori faci în tabela deja existentă o coloană tip text sau json și salvezi datele sub formă json


(Andreiasi Marian) #8

Perfect, am reușit într-un final.


(Ionuț Staicu) #9

Just sayin…


(Marian Popescu) #10

@iamntz bun, chiar foarte bun. @andreiasimarian cum ai rezolvat? Ai creat o altă tabelă?


(madalin) #11

Cred ca cel mai elegant si simplu ar fi cu hasMany si belongsTo

Gen:

App\User:

    [...]
    public function ips()
    {
        return $this->hasMany(Ip::class);
    }

App\Ip:

    [...]
    public function user()
    {
        return $this->belongsTo(User::class);
    }

Evident, tabela de la ips trebuie sa aibe user_id si eventual timestamps :slight_smile:


(István F.) #12

Salveaza adresa cu CIDR (poate fi util cand vrei sa limitezi accesul pe anumite ip-uri sau clase de ip-uri), nu doar adresa, ai grija si la IPv6.