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

Facebook 如何在不显示授权对话框的情况下检测用户以前是否对选项卡式应用程序授权?,facebook,authentication,oauth,facebook-like,facebook-apps,Facebook,Authentication,Oauth,Facebook Like,Facebook Apps,如何在不向用户显示授权对话框的情况下检测用户以前是否授权了选项卡应用程序?这是一个用户体验问题。我们不希望在没有调用action的情况下将用户抛出授权对话框,但如果用户先前授权了应用程序,我们不希望显示调用action来登录用户 下面是一个场景。选项卡应用程序位于具有多个其他应用程序的页面上在Facebook中,“喜欢”按钮在选项卡级别不起作用,而是在页面级别起作用,因此用户可能喜欢不同的应用程序,而没有看到当前的应用程序。因此,如果在选项卡应用程序的登录页上使用任何“喜欢门”,并且需要授权才能

如何在不向用户显示授权对话框的情况下检测用户以前是否授权了选项卡应用程序?这是一个用户体验问题。我们不希望在没有调用action的情况下将用户抛出授权对话框,但如果用户先前授权了应用程序,我们不希望显示调用action来登录用户


下面是一个场景。选项卡应用程序位于具有多个其他应用程序的页面上在Facebook中,“喜欢”按钮在选项卡级别不起作用,而是在页面级别起作用,因此用户可能喜欢不同的应用程序,而没有看到当前的应用程序。因此,如果在选项卡应用程序的登录页上使用任何“喜欢门”,并且需要授权才能使用该应用程序,然后,当我们登录用户时,用户将立即显示授权屏幕,而无需执行任何操作,除非我们能够检测到该用户之前授权了此应用程序。

那么,只有当用户授权您的应用程序时,Facebook才会在
签名请求中发送用户id
。因此,只要该信息缺失,这就意味着用户尚未授权您的应用程序,即显示“身份验证”对话框(或重定向到“身份验证”屏幕)

更多信息,请访问:

与Facebook API集成

当用户导航到Facebook页面时,他们将看到您的页面 在下一个可用选项卡位置添加选项卡。一般来说,页面选项卡是可用的 加载方式与画布页面完全相同。了解更多有关此的信息 在画布教程中。当用户选择页面选项卡时,您将 接收到带一个附加参数的已签名的_请求参数, 页此参数包含一个id为(的页面id)的JSON对象 当前页面)、管理员(如果用户是该页面的管理员),以及 喜欢(如果用户喜欢该页面)与画布页面一样,您可以 不会在中接收应用程序可访问的所有用户信息 在用户授权您的应用程序之前,已签名的\u请求。


您可以使用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像我们提到的那样通过签名请求中的userId发送(然后你可以使用你的应用访问令牌调用/userId/权限,或者在数据库中查找),但Facebook很可能不会发送用户ID,因为您的用户可能不是使用您的单个选项卡应用程序进行身份验证,而是使用不同的共享应用程序密钥进行身份验证

“授权”是指允许访问,而不是登录。为了获得Facebook ID,我们需要让用户登录,但我们需要能够确定用户登录是否会首先导致授权对话框,因为这会显著改变导致用户开始登录过程的操作调用。我不确定我们是否在同一页面上。如果
签名的_请求
(登陆时读取)包含用户ID Don Authorization else Authorization,这很简单!对吧?编辑了我的评论,我太晚了。我误解了你的回答。我们确实走错了方向。授权和登录应用程序是两件不同的事情。我所说的“授权”是指授予应用程序权限的用户,可以在用户的墙上张贴内容。但在新的浏览器会话中,用户在执行OAuth或等效序列之前不一定要登录应用程序,即使用户已经登录到Facebook,因此,如果用户以前没有这样做,我们仍然需要登录用户,此时会弹出授权对话框。从getLoginStatus传入的响应对象要求用户首先登录。我们正在尝试在用户登录之前确定授权状态,以便我们可以自定义登录操作调用(将我们作为新用户授权,而不是作为现有用户登录)@stimpy77我更新了我的答案,但我相当肯定这是不可能的,尽管我不认为我完全理解您的意图。我忽略了您提供的/userId/permissions详细信息。这确实回答了我的问题,因为API端点是我需要的细节。谢谢