1

使用 Stormpath,可以通过执行以下操作来检查应用程序是否存在电子邮件;

application.getAccounts(Accounts.where(Accounts.email().eqIgnoreCase(email)));

然而,我注意到的是 Stormpath Social 登录是基于目录的,并且不会检查其他目录中的重复项。

例如,如果有一个用户使用电子邮件地址在 facebook 上注册 tunji@gmail.com ,然后同一用户尝试在他的 gmail 仍然存在的情况下再次注册tunji@gmail.com,stormpath 当前所做的是将两个用户保存在我的两个不同目录中(例如 facebook 目录和 google目录)。这不是我想要的。

我希望能够确保如果tunji@gmail.com存在于任何目录中,则永远不应将其注册到任何其他目录中。应该简单地选择关联的帐户并且应该代表相同的用户。

问题是 Stormpath 通过以下方式检索社交注册帐户;

ProviderAccountRequest request = Providers.GOOGLE.account().setAccessToken(token).build();
ProviderAccountResult result = application.getAccount(request);

这样做是它只检查指定目录(google)是否有关联的帐户对象(它不检查整个应用程序),如果该目录中不存在,它会自动创建一个并返回新的帐户对象,因此没有机会进行检查并决定是否应该创建帐户。

有没有另一种方法可以在stormpath中实现这种流动?

4

1 回答 1

4

开发人员使用 Stormpath 有几种不同的方式,它完全基于他们的应用程序:

  1. 他们希望应用程序以不同的方式对待 Google/Facebook/用户名密码身份验证。通过社交方式登录的用户会受到不同的对待。
  2. 他们希望应用程序以同样的方式对待 Google/Facebook/用户名密码身份验证。通过任何方式登录的用户将被视为同一用户。

开箱即用,Stormpath 支持#1,但我们确实有一些客户对#2 有要求,他们通过利用 Stormpath 中称为自定义数据的功能来实现这一点。使用自定义数据,开发人员可以在 Google 或 Facebook 目录与另一个目录中的实际“主”帐户之间创建单向或双向链接。

这是如何工作的:

  • 用户使用用户名/密码注册您的应用程序,并在云目录中创建一个帐户。
  • 稍后,用户决定使用 Google/Facebook 登录
  • 成功登录 Facebook 或 Google 后,开发人员从 Facebook 或 Google 帐户(由 Facebook 或 Google 验证)获取电子邮件地址,并通过电子邮件在 Cloud Directory 中搜索帐户。
  • 如果在 Cloud 目录中找到该帐户,则该帐户的 href 存储在 Facebook/Google 帐户的自定义数据中
  • 再次登录时,您可以检查 Facebook 或 Google 帐户以获取自定义数据,并按照 href 访问 Cloud Directory 中的实际帐户。

我希望这是有道理的。

于 2015-12-15T14:03:36.080 回答