Используя 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
- просит человека пройти повторную аутентификацию безоговорочно