5

Mój zespół dobiega końca z ogromną zmianą zmian w naszym systemie i przygotowujemy się do zrobienia wielkiego przełącznika.Utrzymywanie ciasteczek podczas przełączania instancji EC2 Ruby on Rails

Obecnie jesteśmy hostowani na AWS przy użyciu elastycznych adresów IP. Nasz stack to Ruby on Rails, a my używamy capistrano. Posiadamy również aplikację Blackberry i aplikację na iPhone'a na żywo w rękach klientów. Uwierzytelnianie między aplikacjami i serwerem odbywa się za pomocą plików cookie, a nie żadnego klucza uwierzytelniającego.

Doskonale zdaję sobie sprawę, że nie jest to najlepszy sposób na uwierzytelnianie, ale starsza wersja jest starsza.

Ze względu na charakter naszej firmy i usługi, KONIECZNE jest, że po przełączeniu użytkownicy nie są wylogowywani, a sesja przechodząca przez plik cookie z aplikacji mobilnej na serwer jest honorowana.

Próbowałem następujące metody:

Wskazując DNS do innego IP. Wskazanie elastycznego adresu IP na inną instancję AWS.

W każdym przypadku pliki cookie nie wydają się być honorowane.

Jestem programistą, a nie sysadminem i zabrakło pomysłów. Czy istnieje szansa, aby nowa instancja uznała ciasteczka za pomocą Devise on Rails lub AWS? Lub inną opcję, którą powinienem rozważyć?

+1

Czy zmieniasz domeny podczas tego przełącznika? –

+0

Czy kiedykolwiek to naprawiłeś? – bschaeffer

Odpowiedz

3

Pliki cookie HTTP nie zawierają żadnych informacji dotyczących adresu IP usługi. Są powiązane z nazwą domeny (lub katalogiem głównym subdomeny) i ścieżką. W ten sposób możesz zmienić adres IP usługi tak, jak chcesz, o ile domena pozostanie taka sama. W twoim przypadku oba rozwiązania są prawidłowe - możesz przeprowadzić migrację adresu IP lub po prostu zmienić wartość IP rekordu DNS. To powinno wystarczyć, aby użytkownicy byli zalogowani.

Ważne, przypominając pytanie - gdzie przechowujesz dane sesji? Z jakiego sklepu sesyjnego korzystasz w Railsach? Możliwe, że nie zmigrowano danych sesji do środowiska testowego, dlatego klient został wylogowany.

Domyślnym magazynem sesji dla Railsów jest magazyn plików cookie (dane sesji są przechowywane po stronie klienta), więc powinien "po prostu działać" w twoim przypadku, o ile twój secret_token w aplikacji pozostaje taki sam. Może to zostało zregenerowane podczas wdrożenia? Warto to sprawdzić (config/initializers/secret_token.rb) Ten token służy do podpisywania plików cookie, aby upewnić się, że klient ich nie zmienił.

Upewnij się, że wszystkie te punkty są ważne w Twoim przypadku i dokładnie sprawdź proces testowania, ponieważ powinien on działać bez dodatkowych czynności.

+1

Tajemniczy token jest taki sam. Jestem prawie pewien, że sesje również zostały zmigrowane, ale dwukrotnie sprawdzę. Jeśli to zadziała, dam ci znać. – user2320166

+0

Sprawdź w przeglądarce, jaka jest wartość pliku cookie sesji (jest to zwykły tekst zakodowany w formacie base64). To może dać dodatkowe wskazówki. – mdrozdziel