7

我正在构建一个应用程序,该应用程序应允许用户使用Facebook注册/登录,然后他应该能够(始终通过Facebook)登录到“主要”网站

老实说,这比这要复杂一些。那是因为我在主网站中使用django-tastypiedjango-allauth来允许注册、登录和浏览我们的API

基本上我想让移动应用程序用户浏览tastepie API(只有在登录并且您是主网站的用户时才能访问)并授予他添加行的权利(如订单)

这就是我所拥有的

  • 具有有效 Facebook 登录名的 phonegap 应用程序(我现在正在开发)
  • 一个带有 django-allauth 和 django-tastypie 的网站,让我使用 allauth 的 Facebook 登录名注册为新用户
  • 如果移动用户通过 Facebook 注册,主网站上没有任何痕迹(这是问题所在)

我基本上很困惑我应该如何使用访问令牌以及如何传递更多参数(我不仅需要 Facebook 信息来完成注册,还需要一些自定义字段)

有人有这方面的经验或想公开他的工作流程吗?

4

1 回答 1

15

一种常见的做事方式是将所有与注册相关的功能留给网站。在您的 phonegap 应用中,您只需使用应用内浏览器 (IAB) 将用户指向 /accounts/login/。IAB 有类似的事件loadstartexit您应该监控这些事件。监视用户是否成功登录的一种简单方法是在登录结束时将他重定向到特定的 url,例如 /accounts/login/complete/。如果您将令牌附加到该返回 url(如 /accounts/login/complete/?token=123),您将能够在您的应用程序中解析该令牌。您可以简单地使用会话 ID 作为令牌。

更安全的方法是使用 django-oauth2-provider 应用程序并实际实施适当的 oauth 握手。处理几乎相同。使用 IAB open /oauth/authenticate/,您将被要求使用 allauth 登录,然后会出现一个 oauth2 确认对话框,然后将 oauth 授权代码传递给成功 URL。您可以从 phonegap 中获取该代码,并在 phonegap 应用程序中使用 AJAX 调用,您可以获取 oauth 访问令牌。顺便说一句,django-rest-framework 内置了对 django-oauth2-provider 的支持(不知道tastepie)。

一种完全不同的方法是在您的移动应用程序中实现 Facebook 登录,完全独立于网站。登录后,您将获得一个 Facebook 访问令牌。现在,您可以将此令牌发送到网站。给定令牌,网站可以获取用户(https://graph.facebook.com/me?access_token=.. .),检查该用户是否已知,如果是,则返回适当的令牌/会话用户,如果没有,则创建用户帐户并返回一个令牌。

于 2013-05-30T20:46:17.500 回答