Facebook 的有效 OAuth 重定向 URI - Django Social Auth

4
我正在参考有关实现Django social-auth的教程,我已经成功地在Twitter和Google+中实现了它。但是,在Facebook的情况下,我没有看到“Valid OAuth redirect URIs”,这需要提供给Facebook。我认为Facebook的新开发者控制台具有这个新字段。
如果将该字段留空,我仍然可以登录,但我无法从FB获取相关详细信息。这可能是因为缺少“重定向URI”。

enter image description here

我按照以下教程进行操作:

我猜测 "http://localhost:8000/oauth/complete/facebook/" 可能是URI,因为它看起来像google+和twitter的模式,但我仍然无法获得用户的电子邮件ID。

有人可以确认他们在Django应用中使用的Facebook重定向URI吗?


如果在登录对话框调用中使用的重定向URI未在应用程序设置中设置,则您将无法登录,它会直接在对话框中显示错误消息,并阻止您继续进行。 - CBroe
@CBroe:即使我没有提供重定向URI,我仍然能够登录。这对于Google和Twitter是必需的,但对于FB不是。:( - Shashank Vivek
啊,你的意思是在你的代码中没有明确提供它。社交认证组件很可能能够自动生成它。那么更有可能的情况是,它没有正确地请求你想要的字段,这是自API v2.4以来必需的,参见https://dev59.com/3VwY5IYBdhLWcg3weXrV。 - CBroe
2个回答

1
问题在于Django发送了一个“redirect_state参数”,这是Facebook重定向URI策略不允许的。以下是一个简单的解决方案:
  1. Create a new backend for Facebook OAuth that don't pass redirect_state:

    from social_core.backends.facebook import FacebookOAuth2
    
    class CustomFacebookOauth(FacebookOAuth2):
        REDIRECT_STATE = False
    
  2. change social_core.backends.facebook.FacebookOAuth2 on your CustomFacebookOauth in AUTHENTICATION_BACKENDS of settings.py.


0
经过数小时的头痛,我终于发现问题所在:

https://{your_website_name}/social-auth/complete/facebook/

例如:https://www.instagram.com/social-auth/complete/facebook/

请注意,Facebook 强制要求使用 https。该网址与您的网站名称相关。

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