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:
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…
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.
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
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
Sugerez urmatoarele:
Foloseste asta pentru generare: URL::temporarySignedRoute( 'welcome', $this->validUntil, ['user' => $user->id], false); Asta va seta calea relativa.
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)