Используя Flask-OAuthlib, как заставить Facebook запрашивать учетную запись при повторной аутентификации?

Я внедряю аутентификацию с поставщиками OAuth 2 от Google и Facebook, используя пакет Flask-OAuthlib.

Для Google я использую это:

google = oauth.remote_app(
    "google",
    consumer_key=client_id,
    consumer_secret=client_secret,
    request_token_params={"scope": "email"},
    base_url="https://www.googleapis.com/oauth2/v1/",
    request_token_url=None,
    access_token_method="POST",
    access_token_url="https://accounts.google.com/o/oauth2/token",
    authorize_url="https://accounts.google.com/o/oauth2/auth",
)

Для Facebook код похож:

facebook = oauth.remote_app(
    "facebook",
    consumer_key=client_id,
    consumer_secret=client_secret,
    request_token_params={"scope": "email"},
    base_url="https://graph.facebook.com/",
    request_token_url=None,
    access_token_method="GET",
    access_token_url="/oauth/access_token",
    authorize_url="https://www.facebook.com/dialog/oauth",
)

Более полные примеры доступны здесь.

При использовании провайдера Google я могу успешно войти в систему, и после выхода из системы, когда я пытаюсь войти снова, я перенаправляюсь на страницу Google, которая показывает список учетных записей и позволяет мне выбрать один.

При использовании провайдера Facebook, я могу успешно войти в систему, но как только я выйду из системы, когда я снова войду в систему, Facebook больше ничего не спрашивает, а просто автоматически регистрирует меня с помощью ранее использованной учетной записи.

Как заставить Facebook повторно аутентифицироваться, то есть каждый раз показывать пользователю страницу Facebook, которая позволяет выбрать данную учетную запись?

1 ответ

Решение

Нашел это.

Линия:

request_token_params={"scope": "email"},

следует заменить на:

request_token_params={"scope": "email", "auth_type": "reauthenticate"},

На самом деле, согласно официальной документации:

Для повторной аутентификации вы можете использовать те же самые шаги с дополнительными параметрами, чтобы заставить его:

[...]

reauthenticate - просит человека пройти повторную аутентификацию безоговорочно

Другие вопросы по тегам