当有人试图通过Facebook登录我的网站时,他会被重定向到一个页面,在那里他可以看到所有请求的权限,然后点击允许/禁止它们。
有没有办法让这个页面通过javascript打开为分层窗口,而无需用户离开我的网站?例如,当facebook连接窗口悬停在其上方时,我的网站将处于后台。
有什么想法吗?
答案 0 :(得分:6)
答案是否定的。此外,您无法在IFrame中加载登录页面,因为Facebook有该页面的帧断开器。
您正在谈论的页面称为OAuth dialog。默认情况下,请求用户登录您的应用程序将导致页面重定向,因为“display”参数设置为“page”(其他值包括:popup,iframe,touch和wap)。你想要的是调用这个对话框,显示设置为“iframe”。但是,文档states:“如果指定iframe,则必须具有有效的access_token。”而且,要获得access_token,用户需要首先登录您的应用。因此,您将无法在嵌入式IFrame中显示登录页面。
但是,一旦用户使用基本权限集授权您的应用,您可以使用对话框的显示模式提示该用户获得“iframe”的额外权限(因为您拥有access_token)。
答案 1 :(得分:3)
我在弹出窗口中使用Facebook Connect,效果非常好。
1)“假”Facebook-Login-Button
获取Button的屏幕截图,使用带有属性
的a-tag包装它的img-taghref="<?= $facebook->getLoginUrl(...); ?>"
onclick="facebookPopup(this.href); return false"
2)创建Javascript弹出功能
function facebookPopup (url) {
popup = window.open(url, "facebook_popup",
"width=620,height=400,status=no,scrollbars=no,resizable=no");
popup.focus();
}
3)创建FB Connect“Landingpage”
创建一个php-File,用于在完成连接对话框时处理用户的数据,例如,如果他是新用户,则保存他的用户名和facebook-uid,或者如果他的ID已经知道,则只需登录。 然后通过Javascript关闭弹出窗口并刷新主页:
function CloseAndRefresh()
{
window.opener.location.href = window.opener.location.href;
window.close();
}
您可以通过<body onload='CloseAndRefresh()'>
请务必在Login-Url(redirect_uri)中指定您的目标网址。 此外,如果您在登录网址中指定“display”=&gt;“popup”,它将显示“权限请求”-Dialog的精简版本。
答案 2 :(得分:2)
我支持大卫的回答。
此外,如果您以某种方式在iframe或div中加载登录对话框,则用户将无法分辨他/她是否真的向Facebook或其他网站提交登录凭据。
无法发表评论。 :(