Facebook Social Auth 登录:无法加载 URL:此 URL 的域未包含在应用的域中

Facebook Social Auth Login: Can't Load URL: The domain of this URL isn't included in the app's domains

我正在使用 Django 和 python-social-auth 开发 Web 应用程序。我希望用户使用 Facebook 登录。

我的 python 设置中有这个:

SOCIAL_AUTH_FACEBOOK_KEY = '...'
SOCIAL_AUTH_FACEBOOK_SECRET = '...'
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']

当我的用户进入他们应该提供凭据的 Facebook 页面时,他们会看到如下错误:

Can't Load URL: The domain of this URL isn't included in the app's domains.
To be able to load this URL, add all domains and subdomains of your 
app to the App Domains field in your app settings.

在 Facebook for Developers 仪表板中,我添加了 "Facebook Login" 产品并添加了重定向 url:

http://localhost:8000/complete/facebook/

在设置中,网站站点 URL 设置为:http://localhost:8000/,应用程序域设置为 localhost

我做错了什么?

顺便说一句,这是我的用户在 Facebook 页面打开时看到的 url:

https://www.facebook.com/v2.9/dialog/oauth?scope=email&state=HSfkstGUR5028DMhUzfWOSgo6fpPx29E&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fcomplete%2Ffacebook%2F%3Fredirect_state%3DHSfkstGUR5028DMhUzfWOSgo6fpPx29E&client_id=...&return_scopes=true

在您的 Facebook 登录应用中禁用 'Use Strict Mode for Redirect URIs' 设置。

注意生成的 url 的 redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fcomplete%2Ffacebook%2F%3Fredirect_state%3DHSfkstGUR5028DMhUzfWOSgo6fpPx29E 参数。

出于某些无法解释的原因,Facebook 要求有效 OAuth 重定向 URI 设置 与重定向 url 完全相同

所以使用像 https://meyerweb.com/eric/tools/dencoder/ 这样的工具,解码 url 并将有效的 OAuth 重定向 URI 设置为完整的 url。即:

http://localhost:8000/complete/facebook/redirect_state=HSfkstGUR5028DMhUzfWOSgo6fpPA59E

Facebook 不喜欢应用程序设置中 Redirect URI 字段或 redirect_uri 参数中的 localhost。要解决此问题,只需在字段中设置一些内容(我使用 http://myapp.com:8000,然后在 /etc/hosts 中添加条目 127.0.0.1 myapp.com 并通过新的 URL(http://myapp.com:8000).

截至 2018 年 4 月 4 日,我遇到了同样的问题,我找到的唯一解决方案是: 有效的 OAuth 重定向 URI 必须设置为与重定向 url

完全相同

更多信息在这里:https://developers.facebook.com/blog/post/2017/12/18/strict-uri-matching/

升级 social-auth-core to at least version 1.6.0 应该有助于解决这个问题。在其他更改中,它包括以下一项:

Default REDIRECT_STATE to False in FacebookOAuth2 backend.

由于 issue 141,这已更改,它会导致在没有 redirect_state 参数的情况下生成重定向 URL,其动态值使得无法列入白名单。

完成此操作后,将 https://<your-domain>/complete/facebook/ 添加到 Facebook 开发人员门户中的 OAuth 重定向白名单。