J'ai profité de cet article et l'ai posté. J'essaierai également l'authentification Twitter sur Django.
[Note] Twitter OAuth avec pyramide http://qiita.com/maueki/items/02f001440ce409641a50
Avant l'authentification Twitter, Django est livré avec l'authentification des utilisateurs depuis le début. Voyons d'abord cela.
Tout d'abord, installez django.
$ pip install django
Cette fois, je l'ai essayé avec la version 1.10.5. Python est 3.5.2. Ensuite, créez un projet Django et créez un utilisateur administrateur.
$ django-admin startproject myoauth
$ cd myoauth
$ python manage.py migrate
$ python manage.py createsuperuser
Ensuite, créez une application.
$ python manage.py startapp app
Ajoutez l'application créée à INSTALLED_APPS dans settings.py
. (Au fait, il peut être bon de changer les paramètres régionaux)
setting.py
INSTALLED_APPS = (
:
'app.apps.AppConfig',
)
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
Les détails de cette zone peuvent être facilement compris en regardant le tutoriel du chef de famille. https://docs.djangoproject.com/ja/1.9/intro/tutorial01/
ʻConnectez-vous à urls.py` et spécifiez l'url et la vue pour la déconnexion. vue est préparée en standard. (la vue est une vue avec un modèle MTV.)
urls.py
import django.contrib.auth.views
urlpatterns = [
:
url(r'^login/$',
django.contrib.auth.views.login,
{
'template_name': 'app/login.html',
},
name='login'),
url(r'^logout/$',
django.contrib.auth.views.logout,
{
'template_name': 'app/logout.html',
},
name='logout'),
]
login.html est préparé comme ceci.
login.html
:
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
<input type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
:
Décrivez l'URL qui sera redirigée après la connexion à setting.py et l'URL qui sera déplacée lorsque vous accédez à la page restreinte décrite plus loin.
setting.py
LOGIN_REDIRECT_URL = '/'
LOGIN_URL = '/login/'
Si vous ajoutez le décorateur login_required
à la vue, vous ne pouvez le limiter que lorsque vous êtes connecté. Si vous n'êtes pas connecté, vous serez redirigé vers le LOGIN_URL défini dans setting.py.
views.py
from django.contrib.auth.decorators import login_required
@login_required
def private(request):
...
urls.py
urlpatterns = [
:
url(r'^private/$', app.views.private, name='private'),
]
De plus, vous pouvez utiliser le décorateur ʻuser_passes_test` pour ajouter des vérifications arbitraires aux utilisateurs dans le lambda. L'exemple ci-dessous est limité aux privilèges de super utilisateur.
views.py
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.is_superuser)
def private(request):
...
Ensuite, essayez l'authentification Twitter.
En guise de préparation préliminaire, enregistrez l'application depuis la page développeur de Twitter. https://apps.twitter.com
Vous aurez besoin de ces deux clés.
Il semble y avoir différentes options, mais cette fois j'ai utilisé social-auth-app-django
. En plus de Twitter, Facebook et GitHub peuvent être utilisés de la même manière.
$ pip install python-social-auth[django]
La version que j'ai essayée cette fois est la 1.0.0.
setting.py
INSTALLED_APPS = (
:
'social_django',
)
TEMPLATES = [
{
:
'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',
'django.template.context_processors.media',
'django.template.context_processors.static',
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
],
},
},
]
AUTHENTICATION_BACKENDS = [
'social_core.backends.twitter.TwitterOAuth',
'django.contrib.auth.backends.ModelBackend',
]
SOCIAL_AUTH_TWITTER_KEY = 'Consumer Key'
SOCIAL_AUTH_TWITTER_SECRET = 'Consumer Secret'
Vous pouvez préparer un bouton pour passer à l'authentification Twitter comme celui-ci.
login.html
<button type="button" onclick="location.href='{% url 'social:begin' 'twitter' %}'">Twitter</button>
urls.py
urlpatterns = [
:
url(r'', include('social_django.urls', namespace = 'social')),
]
Depuis que j'ai ajouté une application, je vais la migrer à la fin.
$ python manage.py migrate
Vous pouvez maintenant vous authentifier avec Twitter. Après l'authentification, il sera ajouté au modèle utilisateur standard de Django, afin que vous puissiez vérifier l'état de connexion de la même manière que l'authentification utilisateur standard.
Recommended Posts