2009-10-17 5 views
12

Mam dwie witryny, na przykład foo.com i bar.com i oba oparte są na Django. Podstawowa rejestracja odbywa się na stronie foo.com (chciałbym, aby główny użytkownik db był tutaj) i chciałbym, aby wydarzyły się trzy rzeczy:(Django) Udostępnianie uwierzytelniania w dwóch witrynach w różnych domenach

1) Użytkownik logujący się na stronie foo.com ma automatycznie dostęp bar.com bez ponownego logowania się

2) Użytkownik logujący się bezpośrednio do serwisu bar.com jest uwierzytelniany względem bazy danych użytkownika foo.com.

3) Użytkownik nie musi rejestrować się bezpośrednio w serwisie bar.com.

Jak mogę to osiągnąć? Jeśli to znacznie upraszcza, mogę uczynić z bar.com poddomeny foo.com (np. Bar.foo.com), ale muszą to być osobne witryny.

Odpowiedz

5

3rd wymaganie może być łatwo rozwiązany poprzez dzielenie tej samej bazy danych między dwoma miejscami (a więc o tej samej tabeli użytkowników.

The 1st wymogiem jest trudne ze względu na poprzecznych kwestii domen (cookie sesji nie będą udostępniane .)

czego naprawdę szukasz jest Single Sign On (SSO) można rozważyć django-openid

+2

# 2 można zrobić na kilka sposobów: bezpośredni dostęp do innej bazy danych lub za pomocą serwera serwer czat <=>. Jak powiedział John, nr 1 jest głównym problemem. –

4

To zależy od Twoich wymagań. Jeśli możesz, prostym rozwiązaniem jest po prostu hostowanie obu witryn w jednej instancji Django. Innymi słowy, twój projekt Django obsługuje obie witryny, ale masz adres URL rewrite rule, który mapuje foo.com na http://localhost/foo/ i bar.com na http://localhost/bar/. Autoryzacja systemu Django "po prostu zadziała" w tym scenariuszu. Zasady przepisywania mogą oczywiście odnosić się również do subdomen; Zbudowałem system, który obsługuje setki poddomen przy użyciu tej techniki.

Jeśli nie jest to opcja, powinno działać współdzielenie baz danych między instancjami Django i ustawieniem SESSION_COOKIE_DOMAIN, jak wspomnieli inni.

+0

Um, dlaczego głosowanie w dół? Jest to całkowicie naturalny sposób na przetwarzanie subdomen lub domen, które dzielą te same dane. –

+0

Twoje potencjalne rozwiązanie z pewnością nie gwarantuje upadłości. –

+0

Nie mam pojęcia, dlaczego ten głos zostanie odrzucony, ale wygląda na całkiem dobrą odpowiedź na to pytanie i wydaje mi się, że dokładnie to, czego potrzebowałem. Mam nadzieję, że działa to z nginxem przed projektem django ... – paperreduction

4

Miałem bardzo podobny problem, ale OpenID nie był dobrym rozwiązaniem dla mnie. Wraz z pojawieniem się wielu baz danych w django> 1.2, jest teraz całkiem łatwo udostępniać dane sesji i dane logowania w różnych witrynach. This blog post wykonuje świetną robotę wyjaśniając, jak je skonfigurować. Mam nadzieję, że inni uznają to za przydatne, tak jak ja.