Django
Django en sociale netwerken
Zoeken…
parameters
omgeving | Doet |
---|---|
Enkele configuraties | Handige basisinstellingen die bij Django-Allauth horen (die ik meestal gebruik). Voor meer configuratieopties, zie configuraties |
ACCOUNT_AUTHENTICATION_METHOD (= "gebruikersnaam" of "e-mail" of "gebruikersnaam_email") | Specificeert de inlogmethode die moet worden gebruikt - of de gebruiker zich aanmeldt door zijn gebruikersnaam, e-mailadres of een van beide in te voeren. Als u dit op "e-mail" instelt, is ACCOUNT_EMAIL_REQUIRED = True vereist |
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS (= 3) | Bepaalt de vervaldatum van e-mailbevestigingsmails (# dagen). |
ACCOUNT_EMAIL_REQUIRED (= onwaar) | De gebruiker moet bij het aanmelden een e-mailadres overhandigen. Dit gaat samen met de instelling ACCOUNT_AUTHENTICATION_METHOD |
ACCOUNT_EMAIL_VERIFICATION (= ”optioneel”) | Bepaalt de e-mailverificatiemethode tijdens het aanmelden - kies een van "verplicht", "optioneel" of "geen". Wanneer ingesteld op "verplicht", kan de gebruiker zich niet aanmelden totdat het e-mailadres is geverifieerd. Kies "optioneel" of "geen" om logins met een niet-geverifieerd e-mailadres toe te staan. In het geval van "optioneel", wordt de e-mailverificatiemail nog steeds verzonden, terwijl in het geval van "geen" geen e-mailverificatiemails worden verzonden. |
ACCOUNT_LOGIN_ATTEMPTS_LIMIT (= 5) | Aantal mislukte inlogpogingen. Wanneer dit aantal wordt overschreden, mag de gebruiker zich gedurende de opgegeven ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT seconden niet aanmelden. Hoewel dit de allauth-aanmeldingsweergave beschermt, beschermt het de beheerdersaanmelding van Django niet tegen brute gedwongen. |
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE (= False) | Bepaalt of de gebruiker automatisch wordt uitgelogd na het wijzigen of instellen van zijn wachtwoord. |
SOCIALACCOUNT_PROVIDERS (= dict) | Woordenboek met provider-specifieke instellingen. |
Gemakkelijke manier: python-social-auth
python-social-auth is een raamwerk dat het sociale authenticatie- en autorisatiemechanisme vereenvoudigt. Het bevat veel sociale backends (Facebook, Twitter, Github, LinkedIn, etc.)
INSTALLEREN
Eerst moeten we het python-social-auth-pakket met installeren
pip install python-social-auth
of download de code van github. Dit is een goed moment om dit toe te voegen aan uw requirements.txt
bestand.
Instellingen CONFIGUREREN.py
In de settings.py toevoegen:
INSTALLED_APPS = (
...
'social.apps.django_app.default',
...
)
BACKENDS CONFIGUREREN
AUTHENTICATION_BACKENDS bevat de backends die we zullen gebruiken, en we hoeven alleen te zetten wat we nodig hebben.
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',
)
Uw project settings.py
mogelijk nog geen veld AUTHENTICATION_BACKENDS
. Als dat het geval is, voegt u het veld toe. Zorg ervoor dat u 'django.contrib.auth.backends.ModelBackend',
niet mist 'django.contrib.auth.backends.ModelBackend',
omdat het inloggen met gebruikersnaam / wachtwoord afhandelt.
Als we bijvoorbeeld Facebook en Linkedin Backends gebruiken, moeten we de API-sleutels toevoegen
SOCIAL_AUTH_FACEBOOK_KEY = 'YOURFACEBOOKKEY'
SOCIAL_AUTH_FACEBOOK_SECRET = 'YOURFACEBOOKSECRET'
en
SOCIAL_AUTH_LINKEDIN_KEY = 'YOURLINKEDINKEY'
SOCIAL_AUTH_LINKEDIN_SECRET = 'YOURLINKEDINSECRET'
Opmerking : u kunt de nedded-sleutels verkrijgen in Facebook-ontwikkelaars en Linkedin-ontwikkelaars en hier ziet u de volledige lijst en zijn respectieve manier om de API-sleutel en de sleutelgeheim te specificeren.
Opmerking over geheime sleutels: geheime sleutels moeten geheim worden gehouden. Hier is een uitleg over Stack Overflow die nuttig is. Deze zelfstudie is nuttig voor het leren over omgevingsvariabelen.
TEMPLATE_CONTEXT_PROCESSORS helpt bij omleidingen, backends en andere dingen, maar in het begin hebben we alleen deze nodig:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
...
)
In Django 1.8 was het instellen van TEMPLATE_CONTEXT_PREPROCESSORS
zoals hierboven weergegeven, verouderd. Als dit voor u het geval is, voegt u het toe binnen het TEMPLATES
dict. Die van jou zou er ongeveer zo uit moeten zien:
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',
],
},
},
]
GEBRUIK VAN EEN AANGEPASTE GEBRUIKER
Als u een aangepast gebruikersmodel gebruikt en hieraan wilt koppelen, voegt u gewoon de volgende regel toe (nog steeds in settings.py )
SOCIAL_AUTH_USER_MODEL = 'somepackage.models.CustomUser'
CustomUser
is een model dat de standaardgebruiker erft of Abstract.
URL'S CONFIGUREREN
# 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'))
...
)
Vervolgens moet de database worden gesynchroniseerd om de benodigde modellen te maken:
./manage.py migrate
Eindelijk kunnen we spelen!
in een sjabloon moet je zoiets toevoegen:
<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>
als je een andere backend gebruikt, verander dan 'facebook' door de naam van de backend.
Gebruikers afmelden
Nadat u gebruikers hebt aangemeld, wilt u waarschijnlijk de functionaliteit maken om ze weer uit te loggen. Voeg in een sjabloon, waarschijnlijk in de buurt van waar de inlogsjabloon werd getoond, de volgende tag toe:
<a href="{% url 'logout' %}">Logout</a>
of
<a href="/logout">Logout</a>
U wilt uw urls.py
bestand bewerken met code die lijkt op:
url(r'^logout/$', views.logout, name='logout'),
Bewerk ten slotte uw views.py-bestand met code die lijkt op:
def logout(request):
auth_logout(request)
return redirect('/')
Django Allauth gebruiken
Voor al mijn projecten bleef Django-Allauth er een die eenvoudig is in te stellen en die uit de doos komt met veel functies, waaronder maar niet beperkt tot:
- Meer dan 50 sociale netwerkverificaties
- Mix aanmelding van zowel lokale als sociale accounts
- Meerdere sociale accounts
- Optionele directe aanmelding voor sociale accounts - geen vragen gesteld
- E-mailadresbeheer (meerdere e-mailadressen, instellen van een primair)
- Wachtwoord vergeten stroom E-mailadres verificatie stroom
Als je geïnteresseerd bent om je handen vuil te maken, loopt Django-Allauth uit de weg, met extra configuraties om het proces en het gebruik van je authenticatiesysteem aan te passen.
In de onderstaande stappen wordt ervan uitgegaan dat u Django 1.10+ gebruikt
Installatie stappen:
pip install django-allauth
Breng de volgende wijzigingen aan in uw bestand settings.py
:
# 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
Klaar met de wijzigingen in het bestand settings.py
hierboven, ga naar het bestand urls.py
Dit kan uw yourapp/urls.py
of uw ProjectName/urls.py
. Normaal gesproken geef ik de voorkeur aan de ProjectName/urls.py
urlpatterns = [
# other urls here
url(r'^accounts/', include('allauth.urls')),
# other urls here
]
Door eenvoudigweg de include('allauth.urls')
toe te voegen, krijgt u deze urls 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']
Eindelijk, python ./manage.py migrate
om de migranten van Django-allauth in de database te zetten.
Zoals gebruikelijk, moet je, om in te loggen bij je app via elk sociaal netwerk dat je hebt toegevoegd, de sociale accountgegevens van het netwerk toevoegen.
Log in op de Django Admin ( localhost:8000/admin
) en onder Social Applications
in de add your social account details.
Mogelijk hebt u bij elke auth-provider accounts nodig om details op te vragen bij de secties Sociale toepassingen.
Zie de pagina Configuraties voor gedetailleerde configuraties van wat u kunt hebben en tweaken.