使用facebook iOS SDK

时间:2015-10-25 03:47:05

标签: ios facebook facebook-graph-api authentication

我有一个iOS应用程序,当您登录或创建帐户时,它会使用我创建的存储所有信息的后端登录/注册。

问题是,当我使用facebook SDK登录时,我无法找到任何可存储的唯一信息,以便将来验证该用途。

例如,如果我的用户使用他们的电子邮件地址登录,他们会使用他们的电子邮件和密码进行身份验证,那么将来,当我进行API调用时,我会使用用户唯一令牌对所有这些调用进行身份验证。在iOS应用程序和服务器上,当该令牌过期时,它会向iOS应用程序发送一个新令牌,以便我可以继续进行通信。

如何从我可以用来验证用户身份的服务器上存储的facebook API中获取?

我知道有一个令牌,但很快就会到期。我正在使用facebook iOS SDK 4.7.0

1 个答案:

答案 0 :(得分:2)

您希望将您获得的访问令牌发送回服务器。在服务器上,将访问令牌和应用程序ID组合在一起以获取appsecret_proof。 appsecret_proof是一个sha256哈希。向Facebook提出如下所示的请求:

curl \
  -F 'access_token=<access_token>' \
  -F 'appsecret_proof=<app secret proof>' \
  -F 'batch=[{"method":"GET", "relative_url":"me"},{"method":"GET", "relative_url":"me/friends?limit=50"}]' \
  https://graph.facebook.com

如果您获得成功的回复,您就知道这是一个合法的请求,并且可以将用户登录。很酷的部分是访问令牌过期。如果您等待太长时间来提出请求,您将收到失败的回复:

{
  "error": {
    "message": "Error validating access token: Session does not match current stored session. This may be because the user changed the password since the time the session was created or Facebook has changed the session for security reasons.",
    "type": "OAuthException",
    "code": 190,
    "error_subcode": 460,
    "fbtrace_id": "GG1nF4eGYKI"
  }
}