将Facebook PhoneGap登录连接到Django allauth

7
我正在开发一个应用,该应用允许用户使用Facebook进行注册/登录,然后他应该能够通过Facebook登录到“主”网站。说实话,这比较复杂,因为我在主网站中使用了django-tastypiedjango-allauth 来允许注册、登录和浏览我们的API。基本上,我希望移动应用程序用户可以浏览tastypie API(只有在登录并且是主网站的用户才能访问),并授予他添加行(如订单)的权限。以下是我的情况:
  • 使用Facebook登录的PhoneGap应用程序(我正在处理)
  • 一个网站,其中包含django-allauth和django-tastypie,使我可以使用allauth的Facebook登录注册为新用户
  • 如果移动用户通过Facebook进行注册,则在主网站上没有任何痕迹(这是问题所在)

我基本上不知道如何使用访问令牌以及如何传递其他参数(我不仅需要Facebook信息来完成注册,还需要一些自定义字段)。

有没有人有经验或想分享他的工作流程?

1个回答

16
一种常见的做法是将所有注册相关的功能留给网站处理。在您的 PhoneGap 应用程序中,可以使用 In-App-Browser(IAB)简单地将用户指向 /accounts/login/。IAB 具有事件,例如 loadstartexit,您应该监视这些事件。一种简单的监测用户是否成功登录的方法是在登录结束时将其重定向到一个特定的 URL,比如 /accounts/login/complete/。如果您附加了一个 token 到返回的 URL 上(如 /accounts/login/complete/?token=123),则您将能够解析出该应用程序的 token。您可以简单地使用 session ID 作为 token。
更安全的方法是使用 django-oauth2-provider 应用程序并实际实现一个适当的Oauth握手协议。处理方式几乎相同。使用 IAB 打开 /oauth/authenticate/,您将被要求使用 allauth 登录,然后出现一个 oauth2 确认对话框,之后会传递 oauth 授权代码到一个成功的 URL。您可以从 PhoneGap 中获取该代码,并使用手机应用程序内的 AJAX 调用来获取 oauth 访问令牌。顺便说一句,django-rest-framework 内置支持 django-oauth2-provider(不知道 tastypie 是否也支持)。
完全不同的一种方法是在您的移动应用程序中实现 Facebook 登录,与网站完全独立。一旦登录,您将获得一个 Facebook 访问令牌。现在,您可以将此令牌发送到网站上。给定该令牌,网站可以获取用户(https://graph.facebook.com/me?access_token=..),检查该用户是否已知,如果是,则返回相应的令牌/会话以用于该用户,否则创建用户帐户并返回一个令牌。

这正是我需要的 ;) 我认为第三种方法就是我要找的!我的最后一个问题是如何为该用户编程创建会话令牌,但我会在那时考虑它! ;) - VAShhh
关于您描述的第二种方法(django-oauth2-provider),这是否意味着我们不需要编写任何自定义代码??我不确定我是否正确理解了 @pennersr - psychok7
你能提供一些示例链接吗? - Ajoy

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