在我初次启动的iOS应用程序中,用户可以通过3种不同的方式登录:电子邮件/通行证,Facebook或Twitter。注册每个用户将导致创建3个不同的用户。 稍后我的应用程序用户应该可以链接帐户。例如,如果他使用电子邮件/通行证登录,那么他应该可以链接Facebook和Twitter。
解析本机-linkInBackground非常有效,以防我们只有一个用户,即email / pass。但是如果我们已经创建了Facebook或Twitter帐户,Parse SDK将回复错误,说该帐户已经链接到社交。 起初我以为我已经找到了解决方法:
一个社交活动一切顺利,但似乎“authData”字段在我的方法中非常重要,不包含在[PFUser currentUser]中。因此,尽管所有其他数据都已成功传输,但不会传输authData,因此我们没有旧用户的身份验证数据。
问题是:有没有办法从Parse获取authData,或者是否有任何“合法”方式来实现我合并(链接)两(3)个用户的初始目标?
答案 0 :(得分:0)
不,您无法访问身份验证数据,就像您在用户通过电子邮件/通行证直接进行身份验证时无法访问密码一样。这是安全要求,不会改变。
理想情况下,您应添加一些逻辑,用于检查是否应创建新用户,或者是否已存在具有指定详细信息(可能是电子邮件地址)的用户。如果是,则可以拒绝新用户创建并返回用户应该如何登录的建议。
答案 1 :(得分:0)
嗯,我的工作方式与我想要的方式不同,但看起来它是一个非常稳定的解决方案。
我创建了一个自定义的Parse类,比如说MyUser。这个类有几个字段,如:facebookUser,twitterUser,regularUser,anyOtherSocialUserYouWant。它们中的每一个都是指向_User类的指针。
现在,如果我们签名为常规用户,则会创建常规用户。其他如Twitter或Facebook也是如此。通过使用三个不同的社交网站登录,我们将获得三个不同的解析用户。没关系。
在应用程序的某处,用户将按“链接到Facebook”按钮。我们需要保存当前用户。接下来,如果有一个指向这两个用户之一的MyClass对象,我们将对两个用户进行查询(首先是当前用户,第二个是登录后的新用户)。如果没有这样的MyClass对象,我们将创建一个并填写两个字段:regularUser和FacebookUser。
稍后如果用户尝试链接到Twitter,我们也会这样做,查询将返回现有的MyClass对象,该对象将有两个字段,指向常规和Facebook用户。我们只需将指向新签名的Twitter用户的指针添加到该MyClass对象中。
唯一的技巧是数据,这对所有用户都应该是通用的。使用适当的查询很容易。我们需要做两个查询(或一个“OR”查询,但看起来像“OR”查询不能使用指针):首先用当前用户的“user”字段查询所需对象,然后查询第二个查询(内部查询) )用于“linkedUser”等于当前MyClass对象的对象。
因此,为了维护对象,我们需要在每个对象上有两个字段:“user”和“linkedUser”。将始终使用第一个字段,第二个字段仅在链接后使用。 是的,在创建MyClass用户之后,您需要检查当前用户和新注册用户的对象是否具有“linkedUser”字段,并在该字段为空时填充MyClass指针。
希望这会对某人有所帮助。
P.S。:亲爱的Parse.com开发人员,我非常感谢您的工作,但您应该考虑创建一种合并用户的机制。