Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS应用程序中结合本地和Facebook用户_Ios_Objective C_Facebook_Authentication - Fatal编程技术网

如何在iOS应用程序中结合本地和Facebook用户

如何在iOS应用程序中结合本地和Facebook用户,ios,objective-c,facebook,authentication,Ios,Objective C,Facebook,Authentication,我想让应用程序的用户有机会注册/登录Facebook或创建帐户。我知道我可以获得用户的Facebook帐户电子邮件地址,以及他们的名字和姓氏。除了密码之外,这基本上是创建“本地”应用程序帐户的唯一信息。我如何确保如果此人使用另一台设备登录Facebook,他们的两台设备链接到同一个“本地”帐户?(即,如果他们选择使用2台设备登录Facebook,我只希望在我的服务器上为该用户创建一个本地帐户) 理想情况下,我希望两者的登录方案相同。因此,如果该用户使用Facebook登录,我可以(安全地)检查F

我想让应用程序的用户有机会注册/登录Facebook或创建帐户。我知道我可以获得用户的Facebook帐户电子邮件地址,以及他们的名字和姓氏。除了密码之外,这基本上是创建“本地”应用程序帐户的唯一信息。我如何确保如果此人使用另一台设备登录Facebook,他们的两台设备链接到同一个“本地”帐户?(即,如果他们选择使用2台设备登录Facebook,我只希望在我的服务器上为该用户创建一个本地帐户)

理想情况下,我希望两者的登录方案相同。因此,如果该用户使用Facebook登录,我可以(安全地)检查FB帐户是否链接到“本地”帐户,并自动登录该设备,而无需用户键入密码。这可能吗


编辑:“本地”用户将存储在我的服务器上的数据库中,前端将用Python完成,并与应用程序的API一起运行。请注意,“本地”只是指它使用my app web服务,而不是外部社交网络。您可以在用户数据库中执行此操作,如下所示:

假设将用户数据存储在名为
userinfo
的表中,此表应包含用户电子邮件、名字等

在此表中添加另一个名为fbemail的列

如果用户使用web服务登录,其电子邮件将保存在电子邮件字段中,FBE电子邮件应为空,如果使用FB登录,则电子邮件和FBE电子邮件都应为提取的电子邮件


当用户使用FB登录时,检查fbemail字段,如果未找到,则这是一个新用户,添加其数据,如果未找到,则这是一个返回的用户,无需添加其数据。

选项1。

你可以通过他的Facebook用户ID识别你的Facebook用户。如果他在其他设备上使用Facebook登录,你知道这是因为他在身份验证过程中向你发送了他的Facebook用户ID。他还向您发送Facebook访问令牌,您可以通过与Facebook联系验证该令牌是否正确。使用这种方法,您必须为Facebook用户和“普通”电子邮件用户提供不同的身份验证方案

选项2。


要使用相同的登录方案,您可以使用Facebook获取用户电子邮件,并在注册屏幕的电子邮件文本字段中预先添加。用户需要另外提供密码。这意味着您并不是真正登录Facebook,而是使用Facebook获取电子邮件(以及任何其他信息),这样用户就不必键入它。

这是一篇旧文章,但仍然非常有效。你是对的,任何拥有你的FB电子邮件的人都有可能访问你的服务器RESTAPI并登录到它。要访问后端服务,您需要使用FB登录期间生成的FB访问令牌作为密码。这存储在设备钥匙链中,可以通过以下方式检索:

NSString *accessToken = [[FBSDKAccessToken currentAccessToken] tokenString];
NSString *userID = [[FBSDKAccessToken currentAccessToken] userID];
本FB指南介绍了与自定义登录/注册系统并行使用FB身份验证系统的主题:

总之,需要解决不同的情况:

  • 一个人使用他们的电子邮件和密码注册你的应用程序,但后来他们想使用Facebook登录从他们的Facebook帐户获取数据,发布到他们的时间线,或者只是为了将来登录
  • 一个人使用自己的电子邮件和密码注册该应用程序,但后来选择单独登录Facebook。本指南假设首先提供的电子邮件与其Facebook帐户关联的主要电子邮件相同
  • 一个人使用Facebook登录注册该应用程序,然后想使用电子邮件地址和密码登录该帐户

该指南建议使用两个不同的表进行FB登录和自定义登录。

不过,我担心的是安全问题-如果他们确实使用Facebook登录,我使用他们的公共FB电子邮件/id,如何阻止使用相同身份验证方案的用户传入其他人的Facebook ID并获取会话令牌?除了通过FB身份验证之外,没有人能做到这一点,如果FB对用户进行身份验证,这是你不应该关心的,你应该相信他们的回答。该应用程序需要在我的服务器上有一个端点来创建/验证基于Facebook电子邮件的用户-我的意思是,有人可以直接与该端点交谈,并在不通过应用程序上的FB auth的情况下传递Facebook电子邮件。我该如何保护端点以阻止这种情况?我不确定您是如何进行FB身份验证的,但据我所知(并在以前多次实施),要使用FB身份验证,用户需要同时输入其FB用户名和密码,因此,如果用户同时知道这两个,您将无法控制,允许用户仅通过电子邮件登录是不可接受的选项。Facebook身份验证由iOS软件完成。因此,我通过应用程序对他们进行身份验证,但需要某种方式让我的服务器知道我正在创建/登录的用户是真正经过身份验证的。一个想法,我可以传递FB OAuth令牌,并从我的服务器查询FB服务器以进行验证吗?不过,我担心的是安全性-如果他们确实登录Facebook,我使用他们的公共FB电子邮件/id,那么如何阻止使用相同身份验证方案的人传递其他人的Facebook id并获取会话令牌呢?对不起,我不清楚。Facebook用户ID是公开的。您将使用Facebook用户ID和用户将发送给您的令牌。然后,您对Facebook进行身份验证,以检查这些凭据是否正确。它是安全的。基本上,您可以将Facebook ID与电子邮件进行比较,将令牌与密码进行比较。电子邮件是公共的,令牌是私有的。您通过联系Facebook验证令牌。