我正在设计一些需要FB用户信息的FB Page Tab应用程序。一旦用户点击页面上安装的应用程序的选项卡,我想要求用户权限。然后,如果我收到用户和我可以继续使用我的应用程序的页面信息。
问题是我希望用户只要点击选项卡而不是单击按钮就会被定向到oauth对话框。这就是为什么我没有使用弹出方案来获得用户的许可。大多数浏览器都不允许弹出没有点击的弹出窗口。到目前为止我所做的是使用" LOGIN和CANVAS APPS"方向
https://developers.facebook.com/docs/howtos/login/login-for-canvas/
这使我可以在用户点击选项卡时立即将用户引导到oauth对话框,并且还有回调获得用户权限并将应用程序作为Canvas应用程序运行,这是我真正不想要的。这个问题是我在用户点击选项卡时获取页面ID,但是当用户返回到回调URL时,请求对象包含用户信息而不是页面ID。我已经尝试在会话中存储页面ID,但不知何故,当应用程序在回调URL上返回时它会被销毁。我可能会将它存储在数据库中并再次访问它,但我不确定我应该这样做。
我已经研究了一种方法是通过存储页面链接和id然后重新生成链接并将其用作回调来回调用户到页面选项卡应用程序。也不太热衷于此。所有这些问题都是因为您无法在iframe中运行oauth对话框。
我正在使用Rails及其omniauth-facebook gem。
这里有一些链接,其中讨论了一些相同的问题并提出了一些建议。
Redirect back to page tab after user authenticates?
Automatically invoking FB.login on Facebook page tab app for non-logged in user
我已经启动了这个新线程,因为上面的内容很老了。我知道我的困境可能是微不足道的,我可能会错过一些小问题。但任何帮助都会非常感激。
请确认是否有任何代码可以让我的问题更清楚。
答案 0 :(得分:0)
问题是我希望用户只要点击选项卡而不是单击按钮就会被定向到oauth对话框。这就是为什么我没有使用弹出方案获得用户的许可。大多数浏览器都不允许使用不带点击的弹出窗口。
在画布/页面标签应用程序中,您可以在调用display: "async"
时设置参数scope
(在用于传递FB.login
参数的同一对象中) - 这样,它不会打开一个弹出窗口,而是一个在整个Facebook页面上打开的模态对话框;并且因为它不是真正的弹出窗口,所以即使直接在页面加载时调用它也不会被阻止,而且到目前为止没有任何用户交互。