代码之家  ›  专栏  ›  技术社区  ›  anL

使用Facebook登录并在移动应用程序中注册用户

  •  6
  • anL  · 技术社区  · 8 年前

    我有一个Android应用程序,可以让用户通过他们的Facebook帐户使用它。为此,我集成了Facebook登录。然而,我对Facebook的用户注册感到困惑。

    当用户登录时,Facebook提供用户ID、电子邮件和访问令牌。我可以使用它们在我的后端为用户创建一个帐户。让我们演示场景:

    用户第一,

        1- User logged-in by Facebook.
        2- The email is checked by server and returns no such user
        3- An account is created by the information from Facebook
        4- The user keeps using the app with this account.
    

    用户再次出现,

        1- User logged-in by Facebook.
        2- The email is checked by the server and returns that there exists a user.
    

    在这里,有几个问题:

    1-服务器如何信任来自真正Facebook的请求,以便服务器能够响应应用程序“他可以登录”?当然,我是否也应该通过连接服务器端的Facebook来验证访问令牌?

    2-如果不是,如何以非常安全的方式使用Facebook登录注册用户?

    有人提出了类似的问题 here ,但没有解决方案。

    1 回复  |  直到 8 年前
        1
  •  13
  •   anL    8 年前

    我已经研究并最终决定应用以下步骤:

    1- 该应用程序使用Facebook登录,并获取访问令牌、电子邮件、名称和用户ID。

    2- 该应用程序连接到API(服务器端),发送从Facebook收集的信息

    3- 服务器获取访问令牌,并使用以下方法进行验证:

    https://graph.facebook.com/me?access_token={ACCESS-TOKEN}
    

    它返回以下内容:

    {"name":"{USER-NAME}","id":"{USER-ID}"}
    

    4- 服务器检查两个用户ID是否相同。如果是,它将验证令牌是否来自Facebook,并且该信息可用于登录/注册。

    5- 服务器检查系统中是否存在电子邮件/用户id(fb id)。如果没有,则创建一个用户(触发注册过程)。如果成功,则登录设置为成功,服务器返回用户信息,其中包含刚刚生成的访问令牌和刷新令牌。

    6- 其他操作都是以oAuth方式使用这些访问和刷新令牌来执行的,无需再次连接Facebook。

    每次打开应用程序时, AccessToken.getCurrentAccessToken() 从Facebook获取访问令牌。如果为空,用户将看到登录屏幕。如果不是,则将应用上述步骤。

    与此主题相关的好问题和答案:

    REST API for website which uses Facebook for authentication

    Architecture Design - REST API to support Facebook Login done by Mobile app

    关于现有用户、合并操作以及Facebook本身的数据结构建议:

    Essential Guides of Facebook

    Using Facebook Login with Existing Login Systems