结合使用 Facebook 登录功能和现有登录系统

您可能希望构建同时包含自定义登录机制和 Facebook 登录功能的应用。本指南将介绍一些这类情况,并为您提供建议,帮助处理这类应用的用户使用体验。

概览

您可以实施自己的登录系统,让用户能够使用他们的电子邮箱和密码注册应用,从而创建帐户。在这种情况下,应用通常会凭借电子邮箱验证步骤验证用户身份。

或者,您也可以选择只在应用登录系统中使用 Facebook 登录。在这种情况下,用户使用 Facebook 登录注册应用,即可创建帐户,且身份验证步骤由 Facebook 负责。

除了上述两种情况,您的应用可能需要处理更复杂的情况:

  • 用户使用他们的电子邮箱和密码注册应用,但之后又想使用 Facebook 登录获取 Facebook 帐户的数据,以便向时间线发帖或用于在今后登录您的应用。
  • 用户使用他们的电子邮箱和密码注册应用,但之后又单独选择通过 Facebook 登录。本指南假定用户最初提供的邮箱就是与用户的 Facebook 帐户关联的首选邮箱。
  • 用户使用 Facebook 登录注册应用,之后又想使用电子邮箱和密码登录此帐户。

本指南介绍了处理这些情况的最佳方式。

关联 Facebook 登录信息与已登录的帐户

这部分内容介绍以下情况:用户使用应用的自定义登录系统创建了帐户,之后,用户在登录此帐户后想要关联他们的 Facebook 帐户。例如,用户可以使用电子邮箱和密码注册 Spotify,但之后可以选择使用 Facebook 登录关联此帐户与他们的 Facebook 帐户,用户想要向时间线发布听歌活动就属于这种情况。

1.向应用添加 Facebook 登录流程

完成此步骤时,请阅读在应用内使用 Facebook 登录流程的指南。在 Spotify 示例中,您可以在用户表示想要发布听歌活动的应用内某个位置启用 Facebook 登录流程,也可以提供关联应用帐户与 Facebook 帐户的显式选项。

2.处理帐户信息的合并

当用户使用您的自定义登录系统登录应用,并在之后完成 Facebook 登录流程时,您的应用就必须马上合并以下两个非常重要的内容:

  • 通过应用创建的帐户
  • 用户的 Facebook 帐户信息

在大部分应用中,原始的帐户将存储于数据库表内,所以最简单的合并方式是将 Facebook 帐户信息关联至数据库中的对应帐户。

建议新建一个表格,用于存储相关用户的 Facebook 帐户信息。单独创建一个表格,而非在现有的帐户表格中添加更多栏的好处在于:随着时间推移,您可以快速支持其他 OAuth 帐户登录。

之后,如果同一个用户选择登录应用,您就可以匹配数据库中保存的信息,实现用户无缝地使用两种方式登录。

合并 Facebook 登录帐户和单独创建的帐户

情况如下:用户使用自己的凭证(例如:电子邮箱和密码)登录应用,之后退出,并选择使用 Facebook 登录功能登录应用。现在,同一个用户在您的应用内就拥有两个帐户,一个通过应用登录系统创建,一个通过 Facebook 登录流程创建。为打造最佳的用户体验,应用应该合并这两个帐户。

本指南假设由应用创建的每个帐户都关联了一个电子邮箱。但实际上用户创建现有帐户所使用的电子邮箱可能并不是他们的 Facebook 帐户关联的电子邮箱。在这种情况下,您应该在应用内提供明确的“合并帐户”选项,然后允许用户手动指定想要合并的两个独立帐户。
此外,如果自定义的应用帐户未保存电子邮箱,也需要允许用户手动指定想要合并的帐户。

1.修改 Facebook 登录流程,请求电子邮箱权限

如果应用的自定义登录系统使用电子邮箱作为每个帐户的唯一标识,则还应该在 Facebook 登录流程中请求用户的电子邮箱(使用 email 权限)。请阅读我们关于请求权限的指南,了解操作方法。

2.合并 Facebook 登录帐户和应用帐户

用户使用 Facebook 成功登录后,您就会获得此用户的电子邮箱、Facebook 编号和访问口令。应用应搜索数据库内是否有使用同一个电子邮箱创建的应用帐户。如果有,则应合并这两个帐户,并将 Facebook 信息添加至现有帐户(如上所述)。

然后,像往常一样让用户登录。

如果数据库内没有使用对应电子邮箱的条目,则应将此用户作为新用户处理。

向通过 Facebook 登录创建的帐户添加手动登录信息

当用户使用 Facebook 登录功能在应用内创建帐户,但之后又想使用单独的凭证和密码登录帐户时,就需要执行此操作。例如,Netflix 有一个同时使用 Facebook 登录和常规登录系统的网页版应用,同时还有一个只使用常规登录系统的 Xbox 360 应用。

1.确保 Facebook 登录邮箱已通过验证

如果您使用电子邮箱作为每个帐户的唯一标识凭证,您的应用就应该验证与用户的 Facebook 帐户关联的电子邮箱(在 Facebook 登录期间获得)是否有效。在应用中创建代码,向 Facebook 登录流程之后获得的电子邮箱发送验证电子邮件(总之,您可能需要将这个步骤嵌入自己的常规登录系统内),即可验证。

2.要求用户提供新密码(和其他凭证)

电子邮箱经过验证后,您就可以请求用户提供密码,并说明他们可以在今后使用此密码和电子邮箱登录您的应用。用户提供密码后,您可以将此信息添加至数据库的相同部分(即当前存储帐户信息的位置)。

如果应用的登录系统并未将电子邮箱用作帐户标识,而是使用用户创建的内容(例如:帐号)作为标识,也应请求用户在提供密码的同时提供此内容。

用户还可能希望您的应用能够取消 Facebook 帐户与应用登录帐户之间的关联,这种情况下,应该只抹除帐户数据库表中特定用户的 Facebook 信息。