我正在开发一个强制门户实现,它将使用 facebook 对用户进行身份验证。用户必须能够登录 facebook 才能获得身份验证并自由访问互联网。除非用户进行身份验证,否则他们不得自由浏览 facebook(或任何其他网站)。我正在使用javascript sdk。
我在 iOS 设备上遇到了这个流程的问题。 iOS 设备在连接到 ssid 时会弹出没有 cookie 和 session 的伪浏览器。在此页面上,用户可以单击“通过 Facebook 连接”。这将打开 oauth 登录对话框。以下是如何实现的代码片段:
document.location = "https://www.facebook.com/dialog/oauth?client_id="+
WF_FB_APP_ID + "&response_type=token&scope=public_profile,email,user_birthday&redirect_uri="+
encodeURIComponent(document.location.href);
当用户输入电子邮件和密码,而不是验证用户身份时,facebook 返回一些错误代码:200,错误描述“权限错误”和错误原因“用户被拒绝”,并重定向到用户需要再次输入凭据的 safari。此时,输入相同的凭据可以正常工作,并且用户可以访问 Internet。
我想知道为什么信用第一次不起作用以及为什么重定向到 safari。 Andriod 和 windows 设备没有这个问题,因为用户需要打开浏览器并且通过 facebook 登录过程在浏览器中可以正常工作。
有什么我可以尝试的建议吗?我在云中使用 Meraki AP,并将所有可能的 facebook 域放在围墙花园条目中。我试过用谷歌搜索这种情况,但无济于事。任何尝试的帮助或建议将不胜感激。
最佳答案
我意识到这是一个旧线程,但我们只是遇到了可能相同的问题。 facebook 登录对话框会出现在强制门户窗口中,但是一旦您点击登录,强制门户窗口就会关闭,facebook 在普通浏览器中打开,提示再次登录。
在把头发扯了好几个小时后,我弄清楚了实际发生的事情。我们使用运行 openwrt 的 openmesh AP。这些设备动态地将围墙花园配置中域的 IP 地址添加到 iptables,作为对这些域的请求。我还没有完全深入了解它,但是当被列入白名单时,一些 CDN 网络域似乎允许访问 iOS 使用的域的 IP 地址来检查互联网访问。
一旦我从围墙花园列表中删除了对 akamaiedge.net、akamai.net、akamaitechnologies.com 和 cdnjs.cloudflare.com 的引用,一切正常。完整的端到端 Facebook 登录和重定向回我们的登录页面仍保留在强制门户中。
我们实际上在 android 和任何引用 gstatic.com 域的东西上发现了同样的问题。 Android 使用connectivitycheck.gstatic.com,如果您将maps.gstatic.com 或fonts.gstatic.com 之类的内容列入白名单,则android 强制门户会在您的登录页面加载之前自动关闭。
正如我所说,感谢这是一个旧线程,但认为这可能有助于其他人在这里找到自己。
干杯
关于ios - 通过强制门户在 iOS 设备上登录 Facebook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29631522/