【问题标题】:A simple and up-to-date way to implement Facebook login in a Django app在 Django 应用程序中实现 Facebook 登录的简单且最新的方法
【发布时间】:2012-08-31 18:44:13
【问题描述】:

这个问题在*中很常见,关于它有很多不同的问题和答案,但我找不到我真正需要的。

首先,我想准确定义我需要什么:让用户使用他们的 Facebook 凭据登录我的应用程序的选项。该应用程序将保存一个匹配的经典 Django 用户。我只需要使用用户的个人资料图片,并确保每次相同的 Facebook 用户都与匹配的 Django 用户相关。

不幸的是,由于以下原因,我发现实施起来非常令人沮丧:

  1. 到现在为止,经过大量阅读,我找不到最适合这项任务的软件包。
  2. 有些人推荐 django-social-auth 并称赞它的功能和文档。就个人而言,我不明白为什么,因为它不是专门针对 Facebook 的,也没有关于客户端的解释,即 Facebook 登录按钮以及整个流程的工作原理。
  3. 当您访问 Facebook 开发人员时,您会突然发现自己正在阅读一些神奇的 javascript sdk,以及您所需要的所有承诺。然后您再次感到沮丧,无法理解客户端相关的 sdk 如何让用户注册您的应用。

我知道开发人员以某种方式在他们的应用程序中实现了 Facebook auth 包,但我就是不知道该怎么做。

如果有人能告诉我:在这个时间点,将 Facebook 身份验证添加到我的 Django 应用程序的最佳方式是什么?我还需要详细的文档/教程来解释如何登录 Facebook 用户,从设置和配置级别到注册到 Django 应用程序和客户端代码。

【问题讨论】:

    标签: django facebook facebook-javascript-sdk django-socialauth django-allauth


    【解决方案1】:

    有多种方法可以解决问题,“最好”的方法是什么真的很主观。

    主观上,你可以选择django-allauth。以下是一些可帮助您入门的提示:

    • 如果您想保持注册简单,请将SOCIALACCOUNT_AUTO_SIGNUP 设置为True 以实现“无问题”登录。用户只需批准 FB 对话框,他们就会立即登录您的网站。

    • 向您的模板添加登录按钮只是一个问题:

      <a href="{% provider_login_url "facebook" %}">Sign In</a>

    • 该应用程序支持 JS SDK 登录(亲:用户习惯于出现的典型 FB 弹出窗口),或者您可以使用自己的 OAuth 流程。随便你。

    【讨论】:

    • 您能解释一下流程是如何进行的吗?我的意思是,假设我做了所有这些事情——登录的 FB 用户是否获得了匹配的 django 用户?如何访问和使用 FB 用户的头像?如何知道某个 Django 用户是否使用 Facebook 登录?
    • 点击“登录”会导致:DoesNotExist at /accounts/facebook/login/ SocialApp匹配查询不存在。
    • 解决了这个问题。易于安装。非常感谢!现在要阅读有关个人资料图片的信息...
    • 我按照他的建议使用了 pennersr 的 django-allauth。 @kidcapital
    【解决方案2】:

    了解 FB 的 Oauth 2.0 流程的最快方法是使用 FB 的 Javascript SDK。一旦你掌握了窍门,FB 的 PHP 库就是类似的。此外,其他 OAuth 网站(如 Google、Twitter 或 Dropbox)也有几乎相同的实现。

    步步为营:

    1. 了解如何将FB Javascript SDK 安装到一个简单的页面上

    2. 使用FB.login判断登录状态,获取登录url。

    3. 最后,使用FB.Event.Subscribe 并订阅 auth.statusChange 来检测登录/注销更改。

    另外,很高兴查看 https://developers.facebook.com/roadmap/ 即将推出的功能或将要删除的功能。

    【讨论】:

    • 谢谢 - 所以我需要了解 FB js sdk 但不需要安装除 python-oauth2 之外的任何特殊包? (换句话说:不需要安装 django-social-auth?)
    • 正确,一般我写small apps 来测试FB (& Google) API 只是为了确保我的代码仍然有效。这个 Python 应用在 Google App Engine 上运行。
    【解决方案3】:

    django-social-auth 不仅适用于 Facebook,但这并不意味着您应该使用所有可用的后端。

    项目文档位于http://django-social-auth.readthedocs.org/en/latest/index.html,Facebook 后端详细信息位于http://django-social-auth.readthedocs.org/en/latest/backends/facebook.html

    【讨论】:

    • 我已经按照文档安装了 django-social-auth 并且只使用了 Facebook 相关的后端。我还在项目的 urls.py 中设置了一些东西。伊皮。 现在怎么办?! 意见呢?用户是如何创建的?怎么可能没写views.py函数?流程在哪里描述?客户端和 Facebook 的登录按钮呢?令牌呢?下一步该做什么...?
    • django-social-auth (DSA 从现在开始) 只负责登录/注册/断开连接,它不提供其他视图、模板等,这取决于用户来满足用户网站所需的经验。用户注册由指向/login/facebook/ 的任何链接/按钮触发,您可以在模板中使用{% url socialauth_begin "facebook" %},这将创建UserUserSocialAuth 的实例(使用Facebook access_token、Facebook ID 等) .然后,您可以调用您的access_token 有权访问的任何 Facebook API。目前没有解释流程。
    • 谢谢,但这正是问题所在 - 目前没有解释流程。由于我的技能不足以使我成为我的一员,我只希望将来有一些高尚的灵魂。