Поскольку это самый популярный результат поиска по запросу «OTP с DOT (Django OAuth Toolkit)», отвечаю на него, чтобы помочь другим.
После изучения руководств DOT и создания провайдера проверьте, работает ли конечная точка аутентификации (/o/token/
) с username
и password
, чтобы убедиться, что установка прошла успешно, вы можете ее использовать. Если вы не можете сгенерировать токен, используя описанный выше подход, не продолжайте. Пожалуйста, внимательно изучите документы или задайте отдельный вопрос.
Теперь, если вы смогли сгенерировать токен, используя username
и password
, создайте Validator
, расширив oauth2_provider.oauth2_validators.OAuth2Validator
, как показано ниже. Основная идея состоит в том, чтобы переопределить метод validate_user
для OAuth2Validator
, чтобы пользователь использовал ваш OTP
. Пример реализации показан ниже:
from oauth2_provider.oauth2_validators import OAuth2Validator
from django.contrib.auth import get_user_model
USER_MODEL = get_user_model()
class MyOAuth2Validator(OAuth2Validator): # pylint: disable=w0223
""" Primarily extend the functionality of token generation """
def validate_user(self, username, password, client, request, *args, **kwargs):
""" Here, you would be able to access the MOBILE/ OTP fields
which you will be sending in the request.post body. """
# otp = request.otp
# mobile = request.mobile
# user = AppropriateModel.objects.get(otp=otp, mobile=mobile)
user = USER_MODEL.objects.get(id=1)
if user is not None and user.is_active:
request.user = user
return True
return False
Теперь нужно сообщить DOT об этом валидаторе. Вставьте следующую конфигурацию в ваш settings.py
# Need the provider to extend the functionality to use OTP as login method
OAUTH2_PROVIDER = {
'OAUTH2_VALIDATOR_CLASS': 'MyOAuth2Validator'
}
Вы можете использовать конечные точки /o/token/
со своими настраиваемыми полями. Единственное предостережение: вам, возможно, придется отправить поля username
и password
, чтобы обойти проверочный тест. Но вы можете отправить некоторые фиктивные данные в эти поля.
person
Abhishek
schedule
13.03.2018