我们正在将应用程序集成为工作中的Facebook应用程序。我希望能够检测用户是否已登录到Facebook,如果没有,则提示进行身份验证。
到目前为止,我们已成功使用了facebook SDK及其提供的登录功能。但是,这会导致我们的应用程序创建一个身份验证弹出窗口,并且它被大多数浏览器阻止,因此我们的优先任务是重新实现身份验证逻辑而不使用弹出窗口。
根据facebook文档中的this教程,可以通过使用事件订阅来完成用户状态更改请求(在用户注销时无效)或获取访问令牌。问题是令牌作为请求参数返回到顶部窗口(我在用户进行身份验证后指定为返回URL的URL)。由于存在一些跨域和浏览器限制,我无法使用客户端脚本来获取值,而且我被卡住了。
此处已提出相关问题,常见问题是大多数应用都在localhost
上运行。但是,我们的应用程序的情况是我们已将我们的应用程序部署到本地Web服务器,该服务器由公共域公开,但仍然存在跨域限制问题。它在facebook app配置中被其公共域名引用。我完全相信这些域名可以从外部完全访问。
一般情况下,我们的情况是我们希望在Facebook用户使用该应用程序时托管该应用程序。也许这种方法可能与我们的要求不相符?是否可以配置跨域通信以避免此问题?还有其他方法可以避免facebook登录弹出窗口吗?
答案 0 :(得分:3)
首先,现代浏览器中弹出窗口阻止程序的默认设置是,它们只会阻止在没有用户交互的情况下调用的弹出窗口。如果您在页面加载时自动调用FB.login,则可能会被阻止。但是,如果您向用户提供“登录此处”并且仅在点击该链接/按钮时调用FB.login的链接/按钮,则弹出窗口很可能会显示而不会被阻止。
如果您不愿意这样做 - 那么您的另一个选择是使用服务器端身份验证流程。您只需将用户重定向到auth对话框,该对话框将在相同的窗口中进行,之后他将被定向回您的应用程序。