Вход в приглашение Django с использованием только OAuth
Я пытаюсь создать сайт с приглашением только логин. Кроме того, приглашенные пользователи могут войти в систему только с помощью некоторого метода входа OAuth.
Я использую Django 1.4.
Я использую приложения https://github.com/lizrice/django-allauth и https://github.com/lizrice/django-invitation
В instal_apps я включил все приложения, которые в документации сказано мне включить:
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',
'invitation',
Я установил несколько переменных в settings.py:
SOCIALACCOUNT_AUTO_SIGNUP = False
SOCIALACCOUNT_ENABLED = True
INVITE_MODE = True
ACCOUNT_INVITATION_DAYS = 10
INVITATIONS_PER_USER = 1
INVITATION_USE_ALLAUTH = True
И в urls.py мне нужны только URL
url(r'^accounts/register/$', register,
{
'backend': 'invitation.backends.InvitationBackend',
},
name='registration_register'),
(r'^accounts/', include('invitation.urls')),
(r'^accounts/', include('allauth.urls')),
Я могу создать код приглашения, и с этим кодом приглашения я могу перейти к регистрации. Теперь при просмотре регистрации возникает следующая ошибка (полная Stacktrace):
The view invitation.views.register didn't return an HttpResponse object.
Представление регистрации должно отображать поток регистрации, в котором пользователь может выбрать поставщика OAuth для создания учетной записи.
Изменить: с моей конфигурацией ошибка исходит от allauth / socialaccount / views.py
def signup(request, **kwargs):
if request.user.is_authenticated():
return HttpResponseRedirect(reverse(connections))
sociallogin = request.session.get('socialaccount_sociallogin')
if not sociallogin:
return HttpResponseRedirect(reverse('account_login'))
Нет элемента сеанса с таким именем, поэтому код пытается вернуться к "account_login". Этот URL определен в Аллахе. Allauth находится в списке установленных_apps, и URL-адреса включены.
Изменить: добавлен Stacktrace
Редактировать: удалена регистрация, она не нужна.
1 ответ
Более чем возможно, что этот мой код ошибочен:-), но давайте посмотрим, сможем ли мы добраться до сути. Также обратите внимание, что pennersr предложил лучший способ сделать это, но у меня еще не было возможности реализовать его.
Идея заключается в том, что вы не позволяете людям подписаться на новую учетную запись, если у них нет действительного кода приглашения - но если они собираются войти через социальную учетную запись, вы не можете сказать, если они существующий пользователь или новый пользователь до тех пор, пока он уже не вошел в систему. Если выяснится, что они новый пользователь, мы сообщим им, что им нужен ключ приглашения. Проходит время, они каким-то образом получают ключ приглашения, возвращаются на ваш сайт и вводят его. Если они окажутся в том же сеансе, они все равно будут зарегистрированы в социальной сети (я думаю, что именно здесь в нее входит request.session ['socialaccount_sociallogin']). Если нет, то они перейдут на страницу входа в учетную запись, с которой они могут войти в систему или создать новую учетную запись пользователя / pw.
Тем не мение. Я полагаю, что обращение к reverse ('account_login') должно разрешиться на allauth.account.views.login - можете ли вы проверить, что происходит для вас? При быстрой проверке я не вижу, как эта функция не возвращает объект HttpResponse, поэтому мне интересно, вызывается ли он вообще.