Django 2.0和allauth Facebook 2018

3

我使用Django all-auth实现了Twitter和Google登录,但是在Facebook上遇到了问题。 尝试了本地主机/127.0.0.1等各种组合(甚至通过将主机更改为local.domain.com来采取极端措施-还启用了SSL,因为自2018年3月起Facebook显然阻止了http访问)。

到目前为止,我已经做到了这一步...现在我得到了这个错误。 有人能帮我指明正确的方向吗? 我快抓狂了。

KeyError at /accounts/facebook/login/token/ 'access_token' Request Method:    POST Request

URL: https://localhost:8000/accounts/facebook/login/token/ Django Version: 2.0.3 Exception Type: KeyError Exception Value:
'access_token'

{'error': {'code': 5,
           'fbtrace_id': 'Bs4PHOvc+rZ',
           'message': "This IP can't make requests for that application.",
           'type': 'OAuthException'}}

Additional details:
更多细节: http://localhost:8000/accounts/facebook/login/callback
SOCIALACCOUNT_PROVIDERS = {
    'facebook': {
        'METHOD': 'js_sdk',
        'SCOPE': ['email', 'public_profile', 'user_friends'],
        'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
        'INIT_PARAMS': {'cookie': True},
        'FIELDS': [
            'id',
            'email',
            'name',
            'first_name',
            'last_name',
            'verified',
            'locale',
            'timezone',
            'link',
            'gender',
            'updated_time',
        ],
        'LOCALE_FUNC': lambda request: 'en_GB',
        'EXCHANGE_TOKEN': True,
        'VERIFIED_EMAIL': False,
        'VERSION': 'v2.5',
    }
}

“该IP无法为该应用程序发出请求。”听起来像是您在应用程序仪表板中输入了一些内容到“服务器IP白名单”,但它与您现在尝试发出请求的IP不匹配。 - CBroe
2个回答

4

Django 1.4.15,django-allauth 0.18.0,Facebook升级到API v2.8
自2018年3月起,Facebook默认将“使用Redirect URls的严格模式”设置为“是”。我的问题在于Facebook应用程序配置,而不是在django-allauth中。
重新设置应用程序设置如下:

基础设置
- 应用程序域名:“AnySite.com”
- 隐私政策URL:“https://AnySite.com/myprivacy/
- 网站:“https://AnySite.com/
高级设置
- 服务器IP白名单:留空
- 域管理器:留空

Facebook登录设置
启用客户端OAuth登录
启用Web OAuth登录
启用(新功能:强制)使用严格模式进行重定向URL
启用嵌入式浏览器OAuth登录
启用强制使用HTTPS
有效的OAuth重定向URL:“https://AnySite.com/accounts/facebook/login/callback/”(必填项)
希望这有所帮助。


非常感谢你,伙计!我真的很感激。完美地工作了! - Ronald Langeveld

1

更新,如果还有其他人在2020年遇到这个问题:

在Facebook开发者平台上:

  1. 从主应用程序创建一个测试应用程序
  2. 设置 -> 基本信息,将localhost和127.0.0.1添加到应用程序域中。将网站URL设置为https://localhost:8000
  3. 产品 -> Facebook登录 -> 设置。启用客户端,网页登录。启用嵌入式浏览器OAuth登录。 将所有这些内容添加到有效的OAuth重定向URI中: https://127.0.0.1:8000/ https://127.0.0.1:8000/accounts/facebook/login/callback https://localhost:8000/ https://localhost:8000/accounts/facebook/login/callback

在Django中:

  1. pip install django-sslserver
  2. 将sslserver添加到INSTALLED_APPS
  3. python manage.py runsslserver

在管理界面中:

  1. 创建两个站点,https://127.0.0.1:8000/ 和 https://localhost:8000/
  2. 添加一个社交应用程序,Facebook,将测试应用程序ID和密钥添加进去。将上述两个站点注册到其中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接