2008-11-08 8 views
9

Czy ktoś wie o jakichkolwiek klejnotach, tutorialach lub rozwiązaniach umożliwiających użytkownikowi logowanie się do witryny w jednej domenie i automatyczne przyznanie dostępu do innych domen partnerskich w tej samej sesji?Jak mogę udostępnić sesje użytkowników w wielu domenach za pomocą Rails?

Mam uruchomione dwie aplikacje rails, nazwijmy je App-A i App-B. Aplikacja App-A ma powiązaną bazę danych, zasilając rejestrację i logując się na App-A.com. Chciałbym teraz dać wszystkim użytkownikom z kontami App-A.com dostęp do App-B.com, bez konieczności ich ponownego rejestrowania lub ręcznego logowania się na App-B.com osobno.

Z góry dziękuję za pomoc! - Mark

Odpowiedz

5

Możesz ustawić ten sam session_key w obu aplikacjach. W appA environment.rb zmień parametr session_key, tak jak ten

Rails::Initializer.run do |config| 
    ... 
config.action_controller.session = { 
    :session_key => '_portal_session', 
    :secret  => '72bf006c18d459acf51836d2aea01e0afd0388f860fe4b07a9a57dedd25c631749ba9b65083a85af38bd539cc810e81f559e76d6426c5e77b6064f42e14f7415' 
    } 
    ... 
end 

Zrób to samo w AppB. (pamiętaj, aby użyć tego samego sekretu)

Teraz masz wspólne sesje. Załóżmy, że używasz restfull_authentication, która ustawia zmienną sesji o nazwie user_id. Kiedy uwierzytelniasz w appA ustawia on user_id w sesji. Teraz w appB wystarczy sprawdzić, czy identyfikator użytkownika istnieje w sesji.

To ogólny schemat, można opracować więcej przy użyciu tego pomysłu.

+3

Z tego co wiem, działa to tylko wtedy, gdy obie aplikacje są w tej samej domenie? – gtd

+2

To prawda, to rozwiązanie nie działa w wielu domenach. – TuteC

1

Jeśli chcesz utworzyć rozwiązanie pojedynczego logowania dla swoich aplikacji, to polecam zapoznać się z rozwiązaniem RubyCAS. Może być również używany do jednokrotnego logowania do innych aplikacji innych niż Rails, a także do integrowania uwierzytelniania z LDAP lub innymi dostawcami uwierzytelniania.

Powiązane problemy