在您的 iframe 画布应用中,如果用户已经授权您的应用,则 signed_request 将包含 user_id 和 oauth_token,因此无需将用户重定向到“授权”页面。以下是 signed_request 可能包含的几个示例:
用户尚未授权应用程序:
signed_request =
{
"algorithm":"HMAC-SHA256",
"issued_at":1299083443,
"user":{"country":"ca","locale":"en_US","age":{"min":21}
}
用户已经授权应用:
signed_request = {
"algorithm":"HMAC-SHA256",
"expires":1299092400,
"issued_at":1299085507,
"oauth_token":access_token,
"user":{"country":"ca","locale":"en_US","age":{"min":21}},
"user_id":user_id
}
如果您没有看到 user_id 和 oauth_token,那么您可以使用 JavaScript window.top.location.href 技术。如果您确实看到了 user_id 和 oauth_token,则无需要求用户对您的应用进行身份验证,因为他/她已经这样做了。换句话说,如果用户在 1 月 1 日授权您的应用程序,然后在 1 月 10 日返回,那么在 1 月 10 日访问时,signed_request 将已经包含 user_id 和 oauth_token。
这是我使用的技术。我希望这有帮助。
更新于 2011 年 3 月 7 日,以回应 BrynJ 在下面的评论。
要获得signed_request,您必须确保在您的应用程序设置中启用“OAuth 2.0 for Canvas”(可以在此处编辑设置时在“高级”选项卡中找到http://www.facebook.com /developers/apps.php)。所有新应用程序默认启用此功能,但如果您有旧应用程序,则需要自己启用它。另外,请注意同一“高级”选项卡中的“POST for Canvas”设置。如果启用此功能,则 signed_request 将在 POST 正文中传递(例如 signed_request=12345)。如果它被禁用,那么 signed_request 会在查询字符串中传递。
一旦你有了signed_request,你需要验证和解码它以获得user_id和oauth_token。Facebook在这里有一个很好的例子:
http://developers.facebook.com/docs/authentication/signed_request/
顺便说一句,您需要启用“POST for Canvas”,因为 Facebook 将在 3 月 12 日将所有 iframe 应用程序切换到此。更多信息请点击此处:http: //developers.facebook.com/docs/canvas/post/