Ответ 1
Допустим, вы следовали правилам настройки Python Social Auth в http://psa.matiasaguirre.net/docs/configuration/django.html, и вы хотите использовать facebook login. Настройки бэкэнд в settings.py должны выглядеть так:
AUTHENTICATION_BACKENDS = (
'social.backends.facebook.FacebookOAuth2',
'django.contrib.auth.backends.ModelBackend',
)
Вы должны зарегистрироваться в качестве разработчика facebook и создать приложение, а затем заполнить дополнительные данные в файле settings.py:
SOCIAL_AUTH_FACEBOOK_KEY = 'xxxxxxxxxxxxxx'
SOCIAL_AUTH_FACEBOOK_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
Предположим, что после входа в систему вы хотите, чтобы пользователи перенаправлялись на страницу участников, поэтому вы добавляете этот параметр в свои settings.py:
LOGIN_REDIRECT_URL = '/members'
Предположим, вы создали login_app в своем проекте django, а также создали свой домашний вид с помощью шаблона home.html, а также создали представление членов с помощью шаблона members.html(у вас должен быть каталог вашего шаблона).
В соответствии с инструкциями по настройке наш urls.py должен выглядеть так:
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
url('', include('social.apps.django_app.urls', namespace='social')),
url(r'^admin/', include(admin.site.urls)),
)
Если мы попробуем bla-bla-bla url с DEBUG = True, мы получим ошибку:
Using the URLconf defined in your_project.urls, Django tried these URL patterns, in this order:
^login/(?P<backend>[^/]+)/$ [name='begin']
^complete/(?P<backend>[^/]+)/$ [name='complete']
^disconnect/(?P<backend>[^/]+)/$ [name='disconnect']
^disconnect/(?P<backend>[^/]+)/(?P<association_id>[^/]+)/$ [name='disconnect_individual']
^admin/
The current URL, bla-bla-bla/, didn't match any of these.
Для очень простого теста нам нужно добавить домашний вид, просмотр членов и выход из системы (логин уже обработан), поэтому наш обновленный urls.py должен выглядеть:
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
url('', include('social.apps.django_app.urls', namespace='social')),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'login_app.views.home', name='home'),
url(r'^members/', 'login_app.views.members', name='members'),
url(r'^logout/$', 'login_app.views.logout', name='logout'),
)
В нашем каталоге login_app у нас должны быть файлы (не обращайте внимание на *.pyc файлы и папку миграций, потому что я использую версию django 1.7b4):
login_app/
├── admin.py
├── __init__.py
├── __init__.pyc
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
├── views.py
└── views.pyc
Наш view.py должен выглядеть так:
from django.shortcuts import render, redirect
from django.contrib.auth import logout as auth_logout
def home(request):
context = {}
template = 'home.html'
return render(request, template, context)
def members(request):
context = {}
template = 'members.html'
return render(request, template, context)
def logout(request):
auth_logout(request)
return redirect('/')
Другие файлы (включая models.py) мы можем оставить без добавления чего-либо.
Чтобы войти в систему с помощью facebook, мы должны перенаправить ваших пользователей на "login/facebook". Таким образом, вы можете просто добавить эту ссылку или кнопку, где это уместно, в свой шаблон home.html:
<a href="login/facebook">Login with facebook</a>
После нажатия этой ссылки (в случае settings.py, urls.py, views.py в порядке, и ваше приложение для facebook настроено хорошо), пользователи будут входить в систему с помощью facebook и перенаправляться на страницу участников. Если вы входите в администратор django, вы сможете увидеть новую запись в разделе [Главная страницa > По умолчанию > Социальные права пользователя] и новый пользователь в разделе [Домашняя страницa > Аутентификация и авторизация > Пользователи].
Когда пользователь аутентифицируется и перенаправляется на страницу участников, вы можете иметь информацию о пользователе, такую как имя пользователя, имя, фамилию, адрес электронной почты. Вы можете отобразить эту информацию, добавив в свой шаблон members.html:
<p>User name and surname: {{ user.first_name }} {{ user.last_name}}</p>
<p>Username: {{ user.username }}</p>
<p>E-mail: {{ user.email }}</p>
Как вы уже заметили, для выхода из системы мы сделали приложение в наших view.py:
def logout(request):
auth_logout(request)
return redirect('/')
Итак, мы можем добавить ссылку в наш шаблон members.html:
<a href="/logout">Logout</a>
И этого было бы достаточно, чтобы вывести пользователя из системы и перенаправить на начальную домашнюю страницу.
Это был бы очень простой пример, который может дать лучшее понимание входа и выхода в систему с помощью Python Social Auth.