2011-12-14 15 views
6

muszę rozwijać wielokierunkowego aplikacji z pojedynczego znaku na domenach całej (coś jak konto Google z wielu usług Google, takich jak Gmail, Dokumenty Google +):Aplikacja wielostanowiskowa z pojedynczym logowaniem w różnych domenach w Railsach?

multi applications, multi domains, single sign on

  • Aby korzystać Childen witryn użytkownik musi się zalogować na stronie nadrzędnej.
  • Każda witryna ma swoją własną logikę, z wyjątkiem logowania użytkownika, punktów i faktur w postaci .
  • Z aplikacji podrzędnej muszę być w stanie zalogować się na konto użytkownika globalnego , wydać punkty użytkownika i wygenerować fakturę dla niektórych usług.
  • Formularz rejestracyjny, lista faktur i panel do zarządzania punktami są dostępne tylko z witryny/aplikacji nadrzędnej.

Jaka jest najlepsza strategia wdrożenia tego w Rails 3.1? Ważna jest skalowalność, wydajność i bezpieczeństwo.

  • Aplikacje z jedną lub wieloma szynami?
  • Pojedyncze lub wiele baz danych?
  • Globalne usługi w głównej aplikacji lub jako osobne aplikacje/silniki?
  • Jak zaimplementować pojedyncze logowanie? Identyfikator pojedynczej sesji w DB lub coś w rodzaju facebook oauth?
  • Jak zaimplementować punkty wydatkowania i generować faktury w wyniku żądania ze strony podrzędnej?
+0

jakie podejście Brałeś? – Karolis

+0

Z @ david-sulc answer, z '@ token.get ('/ customaction')' w celu otrzymania niestandardowych danych. – rogal111

Odpowiedz

5

Powinieneś być w stanie zaimplementować to za pomocą OmniAuth z wieloma (i niezależnymi) aplikacjami Rails. Będą atrakcje:

Blog post na ten temat: http://blog.joshsoftware.com/2010/12/16/multiple-applications-with-devise-omniauth-and-single-sign-on/

+0

Dzięki, teraz, jak zaimplementować zapytania do strony nadrzędnej, np. Metoda "spędzaj punkty użytkownika". Oauth2 ma '@ token.get ('/ customaction')', to jest właściwe? – rogal111

-1

Załóżmy, że tworzysz Model User w głównej aplikacji i przeprowadzasz migrację. Następnie musisz uzyskać dostęp do tej bazy danych z innych aplikacji. To nie jest problem . Najpierw trzeba dodać definicję połączenia baza głównym aplikacji do config/database.yml zgłoszenia dziecka tak:

parent_connection: 
    adapter: your_adapter_here 
    host: your_host_here 
    username: username 
    password: password 
    database: main_application_production 

Następnie należy stworzyć model o nazwie użytkownika, ale nie z scaffolder lub czegoś. lubię to. Po prostu utwórz plik ręcznie w następujący sposób:

class User < ActiveRecord::Base 
    establish_connection :parent_connection # This uses the specified connection 
end 

W przypadku domyślnym wybranym połączeniem jest ten, który pasuje do nazwy środowiska. Musisz tylko określić odmiany. Teraz możesz uzyskać dostęp do klasy User, tak jak w głównej aplikacji.

+0

Ok, wiem, jak nawiązać połączenie z modelu do wybranego DB, ale jest to niewielka część całego problemu. Potrzebuję rozwiązania/miękkiego wzoru/strategii/modelu, jak rozwiązać problem ze skalowalnością, wydajnością i bezpieczeństwem. – rogal111

+0

-1, zły projekt, aby połączyć dwie aplikacje na linii bazy danych. korzystaj z serwisów internetowych –

Powiązane problemy