如何在不显示授权对话框的情况下检测用户以前是否已授权使用选项卡式应用程序?

时间:2011-09-26 18:49:32

标签: facebook authentication oauth facebook-like facebook-apps

如何在不向用户显示授权对话框的情况下检测用户之前是否已授权选项卡应用程序?这是用户体验问题。我们不希望在没有号召性用语的情况下将用户置于授权对话框中,但如果用户先前已授权该应用,我们不希望显示号召性用语以记录用户。

这是场景。选项卡应用程序托管在具有多个其他应用程序的页面上。 在Facebook中,“赞”按钮在标签级别不起作用,但在页面级别上,因此用户可能在不看当前应用程序的情况下喜欢不同的应用程序。因此,如果有的话gate'用于选项卡应用程序的登录页面,并且需要授权才能使用该应用程序,然后当我们在用户中登录用户时,将立即显示授权屏幕而无需号召性用语,除非我们能够检测到用户以前授权此应用程序。

2 个答案:

答案 0 :(得分:2)

您可以使用javascript SDK并检查登录状态,以查看他们是否已授权您的应用程序。如果有,您可以在其他地方使用javascript重定向或拨打您需要的电话。如果他们没有,您可以在您的页面上显示号召性用语。类似的东西:

FB.getLoginStatus(function(response){
  if(!response.authResponse){
    // redirect to authorization page
    top.location.href="http://www.facebook.com/dialog/oauth?client_id=appid&redirect_uri=http://facebook.com/somefanpage";
    // or instead show a call to action div
  } else {
   //load fan page specific content
 }
});

但这只会告诉您他们当前是否已登录并使用您的应用程序进行身份验证。你可以判断这是一个返回用户与一个全新用户的唯一方法是,如果Facebook通过signed_request发送userId,就像ifaour提到的那样(那么你可以使用你的应用访问令牌调用/ userId / permissions或查找在您的数据库中),但Facebook很可能不会发送userId,因为您的用户可能没有使用您的个人选项卡应用程序进行身份验证,而是使用不同的共享应用程序密钥。

答案 1 :(得分:1)

当用户授权您的应用时,Facebook会在signed_request 中发送用户ID。因此,只要缺少那条信息,这意味着用户还没有授权你的应用程序,即显示auth对话框(或重定向到auth屏幕)!

Page Tab Tutorial中的更多相关内容:

  

与Facebook API集成

     

当用户导航到Facebook页面时,他们会看到您的页面   选项卡添加在下一个可用选项卡位置。从广义上讲,页面标签是   加载方式与Canvas页面完全相同。阅读更多相关信息   在画布教程中。当用户选择您的页面选项卡时,您将会   收到带有一个附加参数的signed_request参数,   页。此参数包含一个带有id的JSON对象(页面ID为   当前页面),admin(如果用户是页面的管理员),和   喜欢(如果用户喜欢该页面)。 与Canvas页面一样,你   将不会收到您的应用可访问的所有用户信息   signed_request,直到用户授权您的应用。