-1

我正在使用Flask-OAuthlib包通过 Google 和 Facebook 实现对 OAuth 2 提供者的身份验证。

对于谷歌,我正在使用这个:

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 页面,从而可以选择给定的帐户?

4

1 回答 1

1

找到了。

该行:

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

应替换为:

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

事实上,根据官方文档

要重新进行身份验证,您可以使用这些相同的步骤和其他参数来强制它:

[...]

reauthenticate- 要求此人无条件地重新认证

于 2017-01-14T22:27:13.000 回答