处理与许多Twitter帐户的连接的最佳方法是什么?

时间:2016-01-29 08:16:58

标签: twitter login twitter-oauth

我的应用程序需要一个Twitter帐户才能创建帐户并进行身份验证。然后,用户可以根据自己的喜好链接任何其他Twitter帐户。因此,用户有一个主要的Twitter帐户,允许他连接到我的应用程序,然后,他可以浏览他之前在应用程序中链接的所有帐户。我的问题是Twitter方面的登录过程。

首先,我考虑过仅在关联新帐户时设置force_login。这样,用户每次想要连接到我的应用程序时都不必在Twitter上重新连接。并且,当他想要关联另一个帐户时,force_login强迫他选择正确的帐户。问题是Twitter保持连接到最后一个认证帐户。因此,如果用户在链接另一个帐户后立即从我的应用程序注销,然后使用Twitter登录,则使用第二个帐户登录,并在我的应用程序上创建新用户。例:

用户有两个推特账号:@a和@b。他用@a对Twitter进行了身份验证。他注册到我的应用程序,Twitter向他显示我的应用程序询问的权限,用户接受,他被重定向到我的应用程序,一个可以用@a创建的新用户。 然后,他链接@b帐户。感谢force_login,Twitter要求他提供凭证。用户登录@b,Twitter询问权限,然后该帐户链接到我的应用程序上的用户。我们现在有一个用户可以使用@a进行身份验证,并且该用户可以链接到@b。 然后,我的应用程序上的会话结束,用户需要重新连接。由于没有force_login,Twitter认为他已经与一个为我的应用程序生成了警告的帐户连接,因此无需用户采取任何操作即可接受连接。但是,没有人看到的是用户与最后一个帐户连接:@b。所以,我得到了@b的登录动作,这意味着新的用户创建。 我现在有两个用户:User1可以使用@a进行身份验证并链接到@b,而User2可以使用@b进行身份验证。我的用户不明白它的@a帐户在哪里。

所以我的问题是:我必须在任何地方设置force_login吗?或者是否有其他方法可以告诉Twitter在链接帐户时不进行身份验证?

编辑了解更多详情:

这并不容易。请记住,许多用户应该管理同一个帐户。一个简单的例子:@Maurice和@Roy是@ReynholmIndustries公司的成员。他们将在Twitter上使用自己的帐户在我的服务上创建自己的帐户。所以在我的服务上,我会有User1可以连接@Maurice和User2,可以连接@Roy。然后,@ Maurice将@ReynholmIndustries帐户添加到我的服务中。因此,在使用@Maurice登录后,他可以管理@Maurice和@ReynholmIndustries。然后,@ Roy将添加@ReynholmIndustries。没有人可以使用@ReynholmIndustries登录,但是@Maurice和@Roy,他们自己的帐户可以管理它。然后,显然有人可以通过注册@ReynholmIndustries来创建新用户。

难点在于添加新帐户时:UserA通过在Twitter上登录来登录我的服务。他现在已经被认证为@Maurice并且作为UserA服务并且可以管理@Maurice。然后,他通过在Twitter上登录@ReynholmIndustries添加了@ReynholmIndustries。他现在已经在@Maurice的服务上获得认证,可以管理@Maurice和@ReynholmIndustries,但在Twitter上,他现在已经被认证为@ReynholmIndustries。 后来,他失去了我的服务认证,他点击登录按钮。他被重定向到twitter oauth表格,我们现在有两种选择:

  1. 没有force_login:他被认证为@ReynholmIndustries,因为它是他签约的最后一个帐户。因此,Twitter不会要求他授权,他会自动重定向到我的服务,但不是作为UserA与@Maurice一起授权,而是作为新用户:UserC将使用@ReynholmIndustries授权。 UserC只能管理@ReynholmIndustries,因为他是新用户。
  2. with force_login:即使他在Twitter方面与@ReynholmIndustries一起授权,他也需要提供登录/通行证,他将确保选择正确的帐户:@Maurice,以访问UserA并管理这两个帐户。但是,每次他必须为我的服务授权时,他总是必须登录/通过。
  3. 通过写这个,我意识到这不是问题:如果我的服务有本地身份验证,用户每次输入auth时都应该输入login / pass ...也许force_login确实是正确的选项。你怎么看待这一切?

1 个答案:

答案 0 :(得分:2)

对我来说,看起来你的问题根本与twitter无关。您只需在应用程序中正确处理登录/注册过程。

根据您的描述,会发生什么:

  • 用户使用@a帐户
  • 注册
  • 在内部,您可以在数据库中创建用户配置文件(我假设您拥有数据库,并不是什么类型的数据库),如下所示:
    • 用户A
    • id = 1(您的内部ID)
    • name = UserA
    • 帐户(相关表格)
      • twitter @a
  • 用户再添加一个(@b)帐户
  • 您更新用户个人资料,如下所示:
    • 用户A
    • id = 1
    • name = UserA
    • 帐户
      • twitter @a
      • twitter @b
  • 用户退出
  • 用户使用@b帐户登录
  • Twitter批准并重定向回您的应用

现在你说"所以,我得到了@b的登录动作,这意味着要创建一个新用户。"。为什么这样? Twitter对您的应用程序一无所知,但您确实知道它。

你想在这里做的只是搜索你的数据库,发现你已经拥有了" twitter @ b"帐户,它链接到" UserA"。然后你只需登录" UserA"进入你的应用程序而不是创建新用户(不管怎么说,你不想让不同的用户拥有相同的推特账号,所以推特账号在你的数据库中应该是唯一的。)