2012-10-30 14 views
13

Podczas testowania django-allauth, jeśli loguję się i wylogowuję z różnymi kontami społecznościowymi, nie wydaje się, że są ze sobą powiązane (w tym, że nie mam do nich dostępu przez patrząc na socialaccount_set.all.0, socialaccount_set.all.1, itp.).django-allauth: Łączenie wielu kont społecznościowych z jednym użytkownikiem

Czy ktoś może wyjaśnić, jak połączyć konta społecznościowe razem?

Widziałem ten wpis: how do i connect multiple social auth providers to the same django user using django-allauth?, który wydaje się spoczywać na użytkowniku, aby zalogować się najpierw z jednym kontem społecznościowym, a następnie połączyć inne konta dla siebie.

Z pewnością powinien istnieć sposób, aby to zrobić bez obciążania użytkownika? Może przez adresy e-mail?

Czy istnieje sposób, aby to zrobić po fakcie z obecnymi użytkownikami?

+0

Możesz uzyskać automatyczne ukłucie, jeśli adres e-mail obu kont społecznościowych jest taki sam. Odpowiedziałem na podobne pytanie, które może ci się przydać - http://stackoverflow.com/a/19443127/805427 – elssar

Odpowiedz

12

Z pewnością powinien istnieć sposób na zrobienie tego bez obciążania użytkownika na ? Może przez adresy e-mail?

Bądź bardzo ostrożny, jak to zrobić. Być może otwierasz ogromną lukę bezpieczeństwa. Jeśli nie obciążasz użytkownika i po prostu automatycznie łączysz konta z tym samym adresem e-mail, wprowadzasz następujący wektor ataku:

  • Znajdź użytkownika na swojej stronie, wymyśl swój adres e-mail (często jest to bardzo łatwe)
  • Utwórz konto w jednym ze swoich dostawców z mojego maila
  • Potwierdź e-mail, dodać swój e-mail, należy usunąć kopalni (to zajmuje tylko jeden ze swoich dostawców, aby nie zrobić pełne przypadków narożne do tego otworu, aby otworzyć)
  • "Zarejestruj się", aby skorzystać z usługi, korzystając z mojego nowego konta dostawcy zastępczego
  • Pobierz automa tched na pierwsze pytania użytkownika, uzyskać dostęp do swojego konta

można podjąć kroki w celu zmniejszenia tego ryzyka, ale nawet jeśli wszyscy dostawcy wymagają email potwierdzenie teraz, każda wpadka w 3 zespołach partia następnie otworzyć tę dziurę twoje bezpieczeństwo.

Może za to, co robisz, ryzykujesz, po prostu bądź ostrożny. Trochę obciążenia użytkownika nie jest chyba najgorszą rzeczą.

Widziałem przepływy tam, gdzie sugerują automatyczne dopasowanie, a następnie prosi o podanie hasła lub ponowne uwierzytelnienie u jednego z oryginalnych dostawców, aby dodać nowe konto do oryginalnego konta. Nie miałyby one takiego samego potencjału do wykorzystania, ale mają pewne przypadki narożników na poziomie mózgowym i powikłania interfejsu użytkownika.

+3

OK, może to być problem z bezpieczeństwem, ale nie odpowiadasz na pytanie. – neves

+2

@neves Zastanawiam się nad rozpatrzeniem tego pytania. To jest odpowiedź, nie ta, którą chcesz. "Nie powinieneś" jest poprawną odpowiedzią w ponad 99% przypadków, gdy pytanie brzmi: "Jak mogę odciąć sobie rękę". – Ted

+5

Nie rozpoczynać wojny płomieniowej tutaj. Twoje obawy związane z bezpieczeństwem są uzasadnione, ale bezpieczeństwo to kompromis. Jeśli moja strona trzecia to tylko Google i Facebook, a moja strona nie jest kontem bankowym, może uda mi się wymienić zabezpieczenia na lepsze. – neves

15

Jeśli twój użytkownik jest już zalogowany, udało mi się połączyć z innym kontem przy użyciu tagu provider_login_url i ustawić atrybut process="connect". Oto fragment kodu, aby umieścić w bloku wyświetlanego na uwierzytelnionych użytkowników:

{% load socialaccount %} 
<p><a href="{% provider_login_url "facebook" process="connect" %}">Connect a facebook account</a></p> 
<p><a href="{% provider_login_url "google" process="connect" %}">Connect a Google account</a></p> 

Ustaw SOCIALACCOUNT_QUERY_EMAIL=True i nie zapomnij poprosić o e-mail w zakresie swoich dostawców:

SOCIALACCOUNT_PROVIDERS = \ 
    {'facebook': 
     {'SCOPE': ['email', ], 
      'AUTH_PARAMS': {'auth_type': 'reauthenticate'}, 
      'METHOD': 'oauth2', 
      'LOCALE_FUNC': lambda request: 'pt_BR'}, 
    'google': 
     {'SCOPE': ['https://www.googleapis.com/auth/userinfo.profile', 
        'email'], 
      'AUTH_PARAMS': {'access_type': 'online'} 
     }, 
} 

Chcę również wiedzieć, czy możliwe jest automatyczne powiązanie konta za pomocą adresu e-mail.Widzę w kolumnie "extra_data" tabeli socialaccount_socialaccount, że zarówno Google, jak i Facebook wysyłają "verified_email": true. Dla mnie wystarczy automatycznie skojarzyć loginy i świetne ulepszenia użyteczności.

Powiązane problemy