LARAVEL - Link / 2 Platforme

Salut, am 2 platforme ce ruleaza pe aceasi baza de date. (Framework: Laravel)
Ideea este ca pot creat un cont nou pe prima platforma dar celui care ii fac contul o sa aiba acces numai pe platforma 2. Ii trimit un mail cu link de activare/setare parola, totul corect. Dar nu stiu cum sa “unesc” URL-ul platformelor intre ele.
Folosesc ceva de genul:

protected function initializeNotificationProperties(User $user)
    {
        $this->user = $user;
        $this->user->welcome_valid_until = $this->validUntil;
        $this->user->save();
        $this->showWelcomeFormUrl = URL::temporarySignedRoute(
            'welcome', $this->validUntil, ['user' => $user->id]
        );
    }

Linkul pe care il primesc pe mail, este activ numai pe platforma 1, pe platforma 2 am pus toate clasele necesare sa functioneze, dar nu stiu cum sa fac sa functioneze si link-ul care s-a instalat pe platforma 1.
Cand intru pe el imi spune ca linkul este expirat… Deoarece nu stiu cum sa le asimilez…

Salut,

Dintr-o privire rapida, vad ca acel temporarySignedRoute foloseste hmac.
Hmac-ul e un fel de a valida o ruta folosind un hash al requestului. Asta include tot de la url la parametrii la body-ul requestului.

Sa zicem ca ai asa: GET <url>?<parametrii>&<hash>
Laravelul va lua requeustul si va face un hash dintre <url> si <parametrii> si il va compara cu <hash>-ul din url. Daca se potrivesc atunci va fi ok si ruta va fi valida pe ambele platforme.

Asigura-te ca folosesti in ambele parti aceasi functie de validare a url-ului cu aceleasi chei/semnaturi. In cod, uite-te pe UrlGenerator::temporarySignedRoute(). si asigura-te ca hash_hmac-ul e la fel la semnatura pe ambele platforme.

1 Like

Nu stiu dar cred ca linkul ala se stocheaza doar pe platforma care a fost generat si pe cealalta e invalid…
Link-ul care se primeste e asta: “http://localhost:8000/welcome/34?expires=1591953832&signature=03474297944b4f4c4d0878912512ae55244e916bd9179f71a08b595f6e95e5b9”.
Ca sa verific daca e valid folosesc:

if (! $request->hasValidSignature()) {
            abort(Response::HTTP_FORBIDDEN, 'The welcome link does not have a valid signature or is expired.');
        }
Folosesc acest pachet: https://github.com/spatie/laravel-welcome-notification

Folosesc acelasi pachet pe ambele platforme, nu stiu de ce pe una merge si pe una imi zice ca linkul e invalid sau expirat.

Acel generator de url foloseste ruta absoluta cand calculeaza semnatura, deci daca nu cumva ai ambele platforme cu aceleasi chei, la acelasi url (i.e localhost:8000) nu o sa-ti mearga in vecii vecilor by default :slight_smile:

Sugerez urmatoarele:

  1. Foloseste asta pentru generare: URL::temporarySignedRoute( 'welcome', $this->validUntil, ['user' => $user->id], false); Asta va seta calea relativa.
  2. Cand verifici ruta: $request->hasValidSignature(false) asta va verifica calea relativa nu absoluta.

Daca nu merge ce am scris mai sus, trebuie sa te asiguri ca keyResolverul este la fel in ambele platforme (basically ca in configul tau ‘app.key’ sa fie la fel)

1 Like