Проблема:перестает двигаться дальше от страницы входа [Джанго-OTP]
Я перенаправлять обратно на странице входа со следующим сообщением об ошибке после предоставления имени пользователя и пароля
«Пожалуйста, введите правильную электронной почты и пароля. Обратите внимание, что оба поля могут быть чувствительны к регистру ».
деталь:
Я следовал документацию Django Two-Factor Authentication. Я должен пропустить что-то в конфигурациях, но точно не знаю. Ниже приведены детали из моего кода.
settings.py
# in middle ware classes
...
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_otp.middleware.OTPMiddleware',
...
# in installed apps
...
'django_otp',
'django_otp.plugins.otp_totp',
'django_otp.plugins.otp_hotp',
'django_otp.plugins.otp_static',
'two_factor',
'otp_yubikey',
...
LOGIN_URL = reverse_lazy('two_factor:login')
TWO_FACTOR_PATCH_ADMIN = True
TWO_FACTOR_CALL_GATEWAY = 'two_factor.gateways.fake.fake'
TWO_FACTOR_SMS_GATEWAY = 'two_factor.gateways.fake.Fake'
TWO_FACTOR_QR_FACTORY = 'qrcode.image.pil.PilImage'
LOGIN_REDIRECT_URL = reverse_lazy('two_factor:profile')
AUTHENTICATION_BACKENDS = ('myapp.backends.EmailAuthBackend',)
AUTH_USER_MODEL = 'users.User'
OTP_LOGIN_URL = LOGIN_URL
Logger также ищет FINE
urls.py
url(r'', include(tf_urls + tf_twilio_urls, 'two_factor')),
и в views.py
@otp_required()
def home(request):
# some logic with HTTP response
Примечание: У меня есть модели пользовательских пользователей в моем приложении, и зарегистрировали их в admin.py в дополнение к этому вопросу я вставив этот файл тоже понятно.
admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from apps.users.models import User
from django import forms
class MyUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = User
class MyUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = User
def clean_username(self):
username = self.cleaned_data['username']
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(self.error_messages['duplicate_username'])
class MyUserAdmin(UserAdmin):
form = MyUserChangeForm
add_form = MyUserCreationForm
# fieldsets = UserAdmin.fieldsets + (
# (None, {'fields': ('extra_field1', 'extra_field2',)}),
#)
admin.site.register(User, MyUserAdmin)
Пожалуйста, укажите, где я буду неправильно. И дайте мне знать, если я не очень ясен. Благодаря!
спасибо за ваше время. LOGIN_URL направляется в двухфакторный режим согласно документации. Нет другого логина входа. У меня есть пользовательские модели и не используется django-auth. Вот почему у меня есть это AUTH_USER_MODEL = 'users.User' Я знаю, что это не очень хорошая идея, но я обязан использовать пользовательские модели. – Fakhir
Хорошо, я понял. Не могли бы вы рассказать о своей версии django и о том, как вы создали пользовательскую модель? – NONAMA
Да, версия Django - 1.5.1. Пользовательские модели наследуются от AbstractBaseUser. Я также определил пользовательский менеджер для этой модели. admin.py находится под вопросом. AUTH_USER_MODEL также определяется в settings.py. Пожалуйста, дайте мне знать, если вам нужно что-то еще. – Fakhir