Django
Django i sieci społecznościowe
Szukaj…
Parametry
Oprawa | Robi |
---|---|
Niektóre konfiguracje | Przydatne podstawowe ustawienia, które pasują do Django-Allauth (którego używam przez większość czasu). Aby uzyskać więcej opcji konfiguracji, zobacz Konfiguracje |
ACCOUNT_AUTHENTICATION_METHOD (= „nazwa użytkownika” lub „e-mail” lub „nazwa_użytkownika”) | Określa metodę logowania do użycia - niezależnie od tego, czy użytkownik loguje się, wprowadzając swoją nazwę użytkownika, adres e-mail lub jedno z obu tych elementów. Ustawienie na „e-mail” wymaga ACCOUNT_EMAIL_REQUIRED = Prawda |
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS (= 3) | Określa datę ważności wiadomości e-mail z potwierdzeniem (liczba dni). |
ACCOUNT_EMAIL_REQUIRED (= False) | Podczas rejestracji użytkownik musi podać adres e-mail. Jest to zgodne z ustawieniem ACCOUNT_AUTHENTICATION_METHOD |
ACCOUNT_EMAIL_VERIFICATION (= „opcjonalne”) | Określa metodę weryfikacji wiadomości e-mail podczas rejestracji - wybierz jedną z „obowiązkowych”, „opcjonalnych” lub „brak”. Po ustawieniu na „obowiązkowe” użytkownik nie może się zalogować, dopóki adres e-mail nie zostanie zweryfikowany. Wybierz „opcjonalne” lub „brak”, aby zezwolić na logowanie przy użyciu niezweryfikowanego adresu e-mail. W przypadku „opcjonalnego” e-mail weryfikacyjny jest nadal wysyłany, natomiast w przypadku „brak” nie są wysyłane e-maile weryfikacyjne. |
ACCOUNT_LOGIN_ATTEMPTS_LIMIT (= 5) | Liczba nieudanych prób logowania. Po przekroczeniu tej liczby użytkownik nie może zalogować się na określone ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT sekund. Chociaż chroni to widok logowania Allauth, nie chroni logowania administratora Django przed brutalnym wymuszeniem. |
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE (= Fałsz) | Określa, czy użytkownik jest automatycznie wylogowywany po zmianie lub ustawieniu hasła. |
SOCIALACCOUNT_PROVIDERS (= dict) | Słownik zawierający ustawienia specyficzne dla dostawcy. |
Prosty sposób: python-social-auth
python-social-auth to framework, który upraszcza mechanizm uwierzytelniania i autoryzacji społecznościowej. Zawiera wiele backendów społecznościowych (Facebook, Twitter, Github, LinkedIn itp.)
ZAINSTALOWAĆ
Najpierw musimy zainstalować pakiet python-social-auth
pip install python-social-auth
lub pobierz kod z github. Teraz jest dobry czas, aby dodać to do pliku requirements.txt
.
KONFIGURACJA settings.py
W pliku settings.py dodaj:
INSTALLED_APPS = (
...
'social.apps.django_app.default',
...
)
KONFIGURACJA OPCJI
AUTHENTICATION_BACKENDS zawiera backendy, których będziemy używać, i musimy tylko umieścić to, czego potrzebujemy.
AUTHENTICATION_BACKENDS = (
'social.backends.open_id.OpenIdAuth',
'social.backends.google.GoogleOpenId',
'social.backends.google.GoogleOAuth2',
'social.backends.google.GoogleOAuth',
'social.backends.twitter.TwitterOAuth',
'social.backends.yahoo.YahooOpenId',
...
'django.contrib.auth.backends.ModelBackend',
)
Twój projekt settings.py
może nie mieć jeszcze pola AUTHENTICATION_BACKENDS
. W takim przypadku dodaj pole. Pamiętaj, aby nie przegapić 'django.contrib.auth.backends.ModelBackend',
ponieważ obsługuje logowanie za pomocą nazwy użytkownika / hasła.
Jeśli korzystamy na przykład z Facebooka i zaplecza LinkedIn, musimy dodać klucze API
SOCIAL_AUTH_FACEBOOK_KEY = 'YOURFACEBOOKKEY'
SOCIAL_AUTH_FACEBOOK_SECRET = 'YOURFACEBOOKSECRET'
i
SOCIAL_AUTH_LINKEDIN_KEY = 'YOURLINKEDINKEY'
SOCIAL_AUTH_LINKEDIN_SECRET = 'YOURLINKEDINSECRET'
Uwaga : Możesz uzyskać niezbędne klucze w programistach Facebooka i Linkedin, a tutaj możesz zobaczyć pełną listę i sposób, w jaki określa klucz API i klucz tajny.
Uwaga na temat tajnych kluczy: tajne klucze należy zachować w tajemnicy. Oto wyjaśnienie przepełnienia stosu, które jest pomocne. Ten samouczek jest pomocny w poznawaniu zmiennych środowiskowych.
TEMPLATE_CONTEXT_PROCESSORS pomoże w przekierowaniach, backendach i innych rzeczach, ale na początku potrzebujemy tylko:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
...
)
W Django 1.8 konfiguracja TEMPLATE_CONTEXT_PREPROCESSORS
jak pokazano powyżej, była przestarzała. Jeśli tak jest w Twoim przypadku, dodasz go do dykt TEMPLATES
. Twój powinien wyglądać podobnie do tego:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
],
},
},
]
KORZYSTANIE Z NIESTANDARDOWEGO UŻYTKOWNIKA
Jeśli używasz niestandardowego modelu użytkownika i chcesz się z nim skojarzyć, po prostu dodaj następujący wiersz (nadal w pliku settings.py )
SOCIAL_AUTH_USER_MODEL = 'somepackage.models.CustomUser'
CustomUser
to model, który dziedziczy lub Abstrakt od domyślnego użytkownika.
KONFIGURACJA urls.py
# if you haven't imported inlcude make sure you do so at the top of your file
from django.conf.urls import url, include
urlpatterns = patterns('',
...
url('', include('social.apps.django_app.urls', namespace='social'))
...
)
Następnie należy zsynchronizować bazę danych, aby utworzyć potrzebne modele:
./manage.py migrate
Wreszcie możemy grać!
w niektórych szablonach musisz dodać coś takiego:
<a href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}">Login with Facebook</a>
<a href="{% url 'social:begin' 'linkedin' %}?next={{ request.path }}">Login with Linkedin</a>
jeśli używasz innego zaplecza, po prostu zmień „facebook” według nazwy zaplecza.
Wylogowywanie użytkowników
Po zalogowaniu użytkowników prawdopodobnie będziesz chciał stworzyć funkcjonalność umożliwiającą ich wylogowanie. W niektórych szablonach, prawdopodobnie w pobliżu miejsca, w którym pokazano szablon logowania, dodaj następujący tag:
<a href="{% url 'logout' %}">Logout</a>
lub
<a href="/logout">Logout</a>
Będziesz chciał edytować plik urls.py
pomocą kodu podobnego do:
url(r'^logout/$', views.logout, name='logout'),
Na koniec edytuj plik views.py kodem podobnym do:
def logout(request):
auth_logout(request)
return redirect('/')
Korzystanie z Django Allauth
Dla wszystkich moich projektów Django-Allauth pozostał jednym, który jest łatwy do skonfigurowania i wychodzi z pudełka z wieloma funkcjami, w tym między innymi:
- Ponad 50 uwierzytelnień w sieciach społecznościowych
- Łącz rejestrację kont lokalnych i społecznościowych
- Wiele kont społecznościowych
- Opcjonalna natychmiastowa rejestracja kont społecznościowych - bez zadawania pytań
- Zarządzanie adresami e-mail (wiele adresów e-mail, ustawianie podstawowego)
- Zapomniane hasło Przepływ weryfikacji adresu e-mail
Jeśli chcesz zabrudzić sobie ręce, Django-Allauth zejdzie ci z drogi, dzięki dodatkowym konfiguracjom, aby ulepszyć proces i korzystanie z systemu uwierzytelniania.
Poniższe kroki zakładają, że używasz Django 1.10+
Kroki instalacji:
pip install django-allauth
W pliku settings.py
wprowadź następujące zmiany:
# Specify the context processors as follows:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# Already defined Django-related contexts here
# `allauth` needs this from django. It is there by default,
# unless you've devilishly taken it away.
'django.template.context_processors.request',
],
},
},
]
AUTHENTICATION_BACKENDS = (
# Needed to login by username in Django admin, regardless of `allauth`
'django.contrib.auth.backends.ModelBackend',
# `allauth` specific authentication methods, such as login by e-mail
'allauth.account.auth_backends.AuthenticationBackend',
)
INSTALLED_APPS = (
# Up here is all your default installed apps from Django
# The following apps are required:
'django.contrib.auth',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
# include the providers you want to enable:
'allauth.socialaccount.providers.google',
'allauth.socialaccount.providers.facebook',
)
# Don't forget this little dude.
SITE_ID = 1
Po zakończeniu zmian w pliku settings.py
powyżej przejdź do pliku urls.py
To może być Twój yourapp/urls.py
lub swoją ProjectName/urls.py
. Zwykle wolę ProjectName/urls.py
urlpatterns = [
# other urls here
url(r'^accounts/', include('allauth.urls')),
# other urls here
]
Wystarczy dodać parametr include('allauth.urls')
, aby otrzymać te adresy URL za darmo:
^accounts/ ^ ^signup/$ [name='account_signup']
^accounts/ ^ ^login/$ [name='account_login']
^accounts/ ^ ^logout/$ [name='account_logout']
^accounts/ ^ ^password/change/$ [name='account_change_password']
^accounts/ ^ ^password/set/$ [name='account_set_password']
^accounts/ ^ ^inactive/$ [name='account_inactive']
^accounts/ ^ ^email/$ [name='account_email']
^accounts/ ^ ^confirm-email/$ [name='account_email_verification_sent']
^accounts/ ^ ^confirm-email/(?P<key>[-:\w]+)/$ [name='account_confirm_email']
^accounts/ ^ ^password/reset/$ [name='account_reset_password']
^accounts/ ^ ^password/reset/done/$ [name='account_reset_password_done']
^accounts/ ^ ^password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/$ [name='account_reset_password_from_key']
^accounts/ ^ ^password/reset/key/done/$ [name='account_reset_password_from_key_done']
^accounts/ ^social/
^accounts/ ^google/
^accounts/ ^twitter/
^accounts/ ^facebook/
^accounts/ ^facebook/login/token/$ [name='facebook_login_by_token']
Na koniec wykonaj python ./manage.py migrate
aby zatwierdzić migrację Django-allauth do bazy danych.
Jak zwykle, aby móc zalogować się do aplikacji za pomocą dowolnej dodanej sieci społecznościowej, musisz dodać szczegóły konta społecznościowego sieci.
Zaloguj się do administratora Django ( localhost:8000/admin
) i w sekcji Social Applications
aby dodać dane konta społecznościowego.
Możesz potrzebować kont u każdego dostawcy uwierzytelniania, aby uzyskać szczegółowe informacje do wypełnienia w sekcjach Aplikacje społecznościowe.
Aby uzyskać szczegółowe konfiguracje tego, co możesz mieć i dostosować, zobacz stronę Konfiguracje .