2

Ich habe jetzt zwei Tage lang gesteckt worden und hier ist mein Problem:Laravel App hinter AWS ELB nicht wie erwartet funktioniert

Ich bin an einem seltsamen Verhalten einer laravel App suchen, die ich nicht entwickeln, sondern Ich habe die Verantwortung herauszufinden, was passiert. Ich habe eine Laravel App hinter AWS ELB mit Sitzung von Memcached behandelt (AWS elastic cache) eingerichtet. Manchmal funktioniert alles super und dann passiert etwas Seltsames:

Wenn sich der Benutzer anmeldet, in der App navigiert, Sachen macht, zeigt ihm irgendwie die Login-Seite. Die Sache ist, dass, wenn ich/login von der Adressleiste entferne und es durch/homepage ersetze, nach einigen Versuchen es geht; Es zeigt die Homepage an, auf die nicht zugegriffen werden kann, ohne eingeloggt zu sein. Dies zeigt, dass der Benutzer nicht ausgeloggt ist und dass etwas nicht richtig eingerichtet ist.

Nachdem ich dies untersucht habe, ist dies die beste Erklärung, die ich formulieren kann: In Laravel gibt es das Catalyst/Sentry-Paket, das die Authentifizierungsaufgaben behandelt. Wenn sich ein Benutzer anmeldet, speichert er seine IP (in diesem Fall ist es ELB'ip) und da sich die IP-Adresse elb's ändert, wenn der Benutzer auf einen Link klickt, nachdem die IP-Änderungen ELB aufgetreten sind, betrachtet die Anwendung die Anfrage als ungültig (I ' Ich denke nur laut nach) und zeigt dem Benutzer die Login-Seite.

Ist das ein häufiges Problem? Wenn ja, wie kann ich das lösen !?

Jede Hilfe wird sehr geschätzt. Vielen Dank.

+0

Eine naive - und wahrscheinlich * falsche *, oder zumindest suboptimale - Lösung würde [sticky sessions] ermöglichen (http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-sticky- sessions.html) in der ELB, die das Problem wahrscheinlich verbergen wird, bis Sie es für echte finden und beheben können. ELB setzt den 'X-Forwarded-For'-Header auf die Client-IP, wenn also Ihre Theorie stimmt, sollte es eine Lösung dafür geben, aber Laravel liegt außerhalb meines Fachwissens. Ich vermute, dass Sie nicht der Erste sind, der darauf stößt, und es gibt wahrscheinlich eine korrektere Lösung. –

Antwort

1

Dies sieht aus wie ein memcached Problem hier. Was sentry verwendet, um zu identifizieren, ob Sie ein gültiger Benutzer sind, ist etwas, das genannt wird. Wenn mein Bericht korrekt ist, ändert sich persist code ohne klaren Grund (außer einem memcached Fehlverhalten). Verwenden Sie stattdessen redis, funktioniert perfekt.