2016-10-24 7 views
3

Я использую Django двухфакторный auth на моем сайте, и мне бы хотелось, чтобы некоторые виды защищались двумя FA, а некоторые другие.Django двухфакторная аутентификация, требуется 2FA для определенных просмотров

Для этого я использую декоратор @otp_required, который отлично работает, но, к сожалению, просит пользователей снова ввести свои учетные данные (для обработки пользовательских сеансов я использую модуль регистрации).

Можете ли вы дать мне возможность взломать форму, чтобы просто попросить пользователя ввести токен (пропуская шаг формы, в основном)?

Спасибо большое,

ответ

1

Для тех, кто заботится, я нашел способ сделать это, что является довольно чистым.

Хитрость заключалась в том, чтобы переопределить класс LoginView в модуле core.py модуля two_factor_authentication.

Для того, чтобы сделать это, перейдите к представлениям и вставьте следующий код:

class CustomLoginView(LoginView): 

    form_list = (
     ('token', AuthenticationTokenForm), 
     ('backup', BackupTokenForm), 
    ) 

    def get_user(self): 
     self.request.user.backend = 'django.contrib.auth.backends.ModelBackend' 
     return self.request.user 

В принципе, я стереть «аутентификацию» шаг и переопределить метод get_user() для того, чтобы вернуть текущий пользователь , Бэкэнд должен быть указан иначе Django вызывает ошибку.

Теперь, чтобы этот класс использовался вместо LoginView, перейдите к своим URL-адресам и вставьте следующую строку, прежде чем включать two_factor.urls.

url(r'^account/login/$', tradingviews.CustomLoginView.as_view(), name='login'), 

Вот и все!

Смежные вопросы