Что мне нужно, чтобы каждый раз, когда пользователь запрашивает новый маркер доступа, старых станет недействительным, непригодным для использования и будет удален.
Предоставление нового токена, когда вы запрашиваете его, похоже на ожидаемое поведение. Разве вам не возможно revoke существующий, прежде чем просить новый?
Update
Если вы решили сохранить только один маркер - Класс
OAuth2Validator наследует OAuthLib-х
RequestValidator
и переопределяет метод
save_bearer_token. В этом методе перед кодом, связанным с созданием экземпляра
AccessToken model, и его методом .save() вы можете запросить (аналогично
this), чтобы узнать, есть ли в этом пользователе AccessToken, сохраненный в БД для этого пользователя. Если найден, существующий токен можно удалить из базы данных.
я настоятельно рекомендую сделать это изменение настраивается, в случае, если вы измените свое мнение в будущем (после того, как все несколько маркеров выпускаются по причинам, как this)
Более простое решение, чтобы иметь свой собственный класс валидатора, вероятно, один, который наследует oauth2_provider.oauth2_validators.OAuth2Validator
и переопределяет save_bearer_token
. Этот новый класс следует за OAUTH2_VALIDATOR_CLASS
в settings.py
Кроме того, есть ли способ, что пароль типа хрюкать обыкновение создавать попробуйте обновить маркер. Я не использую это в своем приложении.
Django OAuth Toolkit зависит от OAuthLib.
Создание refresh_token опциональный сводится к create_token
метода в BearerToken
классе oAuthLib в this line и класс для гранта пароль является here. Как вы можете видеть, метод __init__
для этого класса принимает аргумент refresh_token
, который по умолчанию установлен в True
. Это значение используется в create_token_response
метода того же класса на линии
token = token_handler.create_token(request, self.refresh_token)
create_token_response
метод в OAuthLibCore
классе Django OAuth инструментария является один, я считаю, вызывает в OAuthLib соответствующий create_token_response
. Обратите внимание на использование self.server
и его инициализацию в методе __init__
этого класса, который имеет только валидатор, переданный в качестве аргумента, но ничего не связанный с refresh_token
.
Сравните это с create_token_response
методом OAuthLib Imlicit grant type «s, который явно делает
token = token_handler.create_token(request, refresh_token=False)
, чтобы не создавать refresh_token
на всех
Так что, если я не пропустил что-то здесь, tldr, я не думаю, Инструментарий Django OAuth предоставляет функцию необязательного refresh_token
.
Могу ли я использовать этот метод, чтобы не требовать имя пользователя и пароль вообще? И вместо этого требуется пароль приложения или что-то еще. – shenk