我的应用程序需要一个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表格,我们现在有两种选择:
通过写这个,我意识到这不是问题:如果我的服务有本地身份验证,用户每次输入auth时都应该输入login / pass ...也许force_login确实是正确的选项。你怎么看待这一切?
答案 0 :(得分:2)
对我来说,看起来你的问题根本与twitter无关。您只需在应用程序中正确处理登录/注册过程。
根据您的描述,会发生什么:
现在你说"所以,我得到了@b的登录动作,这意味着要创建一个新用户。"。为什么这样? Twitter对您的应用程序一无所知,但您确实知道它。
你想在这里做的只是搜索你的数据库,发现你已经拥有了" twitter @ b"帐户,它链接到" UserA"。然后你只需登录" UserA"进入你的应用程序而不是创建新用户(不管怎么说,你不想让不同的用户拥有相同的推特账号,所以推特账号在你的数据库中应该是唯一的。)