Django
Django och sociala nätverk
Sök…
parametrar
Miljö | Har |
---|---|
Vissa konfigurationer | Praktiska grundinställningar som följer med Django-Allauth (som jag använder mest av tiden). Mer information finns i Konfigurationer |
ACCOUNT_AUTHENTICATION_METHOD (= "användarnamn" eller "e-post" eller "användarnamn_email") | Anger inloggningsmetoden som ska användas - oavsett om användaren loggar in genom att ange sitt användarnamn, e-postadress eller endera av båda. För att ställa in detta till "e-post" krävs ACCOUNT_EMAIL_REQUIRED = Sant |
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS (= 3) | Bestämmer utgångsdatum för e-postbekräftelsemails (antal dagar). |
ACCOUNT_EMAIL_REQUIRED (= False) | Användaren måste lämna in en e-postadress när han registrerar sig. Detta går i takt med inställningen ACCOUNT_AUTHENTICATION_METHOD |
ACCOUNT_EMAIL_VERIFICATION (= ”valfritt”) | Bestämmer e-postverifieringsmetoden vid registreringen - välj en av "obligatorisk", "valfri" eller "ingen". När den är inställd på "obligatorisk" blockeras användaren från att logga in tills e-postadressen har verifierats. Välj "valfritt" eller "ingen" för att tillåta inloggningar med en overifierad e-postadress. Vid "valfritt" skickas e-postverifieringsmeddelandet fortfarande, medan i fallet "inget" skickas inga e-postverifieringsmeddelanden. |
ACCOUNT_LOGIN_ATTEMPTS_LIMIT (= 5) | Antal misslyckade inloggningsförsök. När detta nummer överskrids är det förbjudet att logga in i användaren under de angivna ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT sekunder. Även om detta skyddar allauth-inloggningsvyn, skyddar det inte Djangos administratörsinloggning från att vara tvingad. |
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE (= Falskt) | Bestämmer om användaren automatiskt ska loggas ut efter att ha ändrat eller ställt in sitt lösenord eller inte. |
SOCIALACCOUNT_PROVIDERS (= dict) | Ordbok som innehåller leverantörsspecifika inställningar. |
Enkelt sätt: python-social-authent
python-social-authent är ett ramverk som förenklar mekanismen för social autentisering och auktorisation. Det innehåller många sociala backend (Facebook, Twitter, Github, LinkedIn, etc.)
INSTALLERA
Först måste vi installera python-social-authent-paketet med
pip install python-social-auth
eller ladda ner koden från github. Det är nu en bra tid att lägga till detta i din requirements.txt
fil.
KONFIGURERING settings.py
Lägg till i settings.py:
INSTALLED_APPS = (
...
'social.apps.django_app.default',
...
)
KONFIGURERA BACKENDER
AUTHENTICATION_BACKENDS innehåller de baksidor som vi kommer att använda, och vi måste bara sätta vad vi behöver.
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',
)
Ditt projekt settings.py
kanske ännu inte har ett AUTHENTICATION_BACKENDS
fält. Om så är fallet lägg till fältet. Se till att du inte missar 'django.contrib.auth.backends.ModelBackend',
eftersom det hanterar inloggning med användarnamn / lösenord.
Om vi till exempel använder Facebook och Linkedin Backends måste vi lägga till API-nycklarna
SOCIAL_AUTH_FACEBOOK_KEY = 'YOURFACEBOOKKEY'
SOCIAL_AUTH_FACEBOOK_SECRET = 'YOURFACEBOOKSECRET'
och
SOCIAL_AUTH_LINKEDIN_KEY = 'YOURLINKEDINKEY'
SOCIAL_AUTH_LINKEDIN_SECRET = 'YOURLINKEDINSECRET'
Obs! Du kan hämta neddelade nycklar i Facebook-utvecklare och Linkedin-utvecklare och här kan du se hela listan och hans respektive sätt att beskriva API-nyckeln och nyckeln Secret.
Obs om hemliga nycklar: Hemliga nycklar ska hållas hemliga. Här är en stapelöverskridande förklaring som är användbar. Denna handledning är användbar för att lära sig om miljövariabler.
TEMPLATE_CONTEXT_PROCESSORS hjälper till vidarekopplingar, backend och andra saker, men i början behöver vi bara dessa:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
...
)
I Django 1.8 TEMPLATE_CONTEXT_PREPROCESSORS
inställningen av TEMPLATE_CONTEXT_PREPROCESSORS
som visas ovan. Om detta är fallet för dig lägger du till det inuti TEMPLATES
dikten. Dina borde se ut som liknar det här:
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',
],
},
},
]
ANVÄNDER EN ANPASSAD ANVÄNDARE
Om du använder en anpassad användarmodell och vill associera med den, lägg bara till följande rad (fortfarande i settings.py )
SOCIAL_AUTH_USER_MODEL = 'somepackage.models.CustomUser'
CustomUser
är en modell som ärver eller abstrakt från standardanvändaren.
KONFIGURERA 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'))
...
)
Nästa måste synkronisera databasen för att skapa nödvändiga modeller:
./manage.py migrate
Äntligen kan vi spela!
i någon mall måste du lägga till något liknande:
<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>
om du använder en annan backend ändrar du bara "facebook" med namnet på backend.
Loggar ut användare
När du har loggat in användare kommer du förmodligen att vilja skapa funktionen för att logga ut dem igen. Lägg till följande tagg i någon mall, troligtvis nära där inloggningsmallen visades:
<a href="{% url 'logout' %}">Logout</a>
eller
<a href="/logout">Logout</a>
Du vill redigera din urls.py
fil med kod som liknar:
url(r'^logout/$', views.logout, name='logout'),
Redigera slutligen din views.py-fil med kod som liknar:
def logout(request):
auth_logout(request)
return redirect('/')
Med Django Allauth
För alla mina projekt förblev Django-Allauth ett som är lätt att installera och kommer ut ur lådan med många funktioner inklusive, men inte begränsat till:
- Cirka 50+ sociala nätverksautentiseringar
- Bland registrering av både lokala och sociala konton
- Flera sociala konton
- Valfri omedelbar registrering för sociala konton - inga frågor ställs
- E-postadresshantering (flera e-postadresser, inställning av en primär)
- Lösenord glömt flöde E-postadressverifieringsflöde
Om du är intresserad av att få dina händer smutsiga, kommer Django-Allauth ur vägen, med ytterligare konfigurationer för att justera processen och användningen av ditt autentiseringssystem.
Stegen nedan antar att du använder Django 1.10+
Installationssteg:
pip install django-allauth
settings.py
följande ändringar i din settings.py
fil:
# 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
Klart med ändringarna i filen settings.py
ovan, gå till urls.py
filen. Det kan vara din yourapp/urls.py
eller ditt ProjectName/urls.py
Normalt föredrar jag ProjectName/urls.py
urlpatterns = [
# other urls here
url(r'^accounts/', include('allauth.urls')),
# other urls here
]
Bara lägga till include('allauth.urls')
, ger dig dessa webbadresser gratis:
^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']
Slutligen python ./manage.py migrate
att begå migranterna från Django-allauth till databasen.
Som vanligt måste du lägga till sociala kontouppgifter för nätverket om du vill logga in på din app med alla sociala nätverk du har lagt till.
Logga in på Django Admin ( localhost:8000/admin
) och under Social Applications
lägg till dina sociala kontouppgifter.
Du kan behöva konton hos varje auktoriserad leverantör för att få information att fylla i avsnitten Sociala applikationer.
För detaljerade konfigurationer av vad du kan ha och justera, se sidan Konfigurationer .