FB.Login Popup Dialog http://s17.postimg.org/47zhfnt0d/8_1_2014_6_33_34_PM.jpg
FB.Login
有3个可点击按钮:
当用户同时点击取消& 好的按钮,使用 authResponse 触发回调,这样我就可以处理用户是否授权该应用。
但如果用户点击“关闭”关闭弹出窗口,我只会收到 authResponse 一次。第二次弹出用户关闭FB.Login
对话框时,不会触发回调函数。
这是我的代码:
FB.login(facebook_login, { scope: 'email, publish_actions, user_birthday' });
function facebook_login(response) {
console.log('facebook_login'); //update
console.log(response); //update
if (response.status === 'connected') {
console.log('connected');
}
else if (response.status === 'not_authorized') {
FB.login(facebook_login, { scope: 'email, publish_actions, user_birthday' });
}
else {
// the user isn't logged in to Facebook.
FB.login(facebook_login, { scope: 'email, publish_actions, user_birthday' });
}
}
我打算提示用户3次授权该应用。
我实际上记录了我的回调函数收到的每个响应。请参阅上面的更新,但关闭对话框弹出窗口仅返回响应一次,“status = not_authorized”。 单击取消将返回相同的状态,但会再次显示登录弹出窗口。
我的控制台日志:
答案 0 :(得分:1)
很抱歉这么说,但如果用户取消了 尝试再次执行身份验证 - 如果您尝试在回拨{{1}时再次呼叫FB.login
然后用户的弹出窗口阻止程序将触发,对话框将失败。例如,在Chrome中,他们会看到如下内容:
相反,您应该向用户显示一条消息,告诉他们为什么需要进行身份验证,并使用下面的按钮或链接,以便他们在改变主意时再试一次。
如果您在回调中调用FB.login,这是一个异步事件,大多数浏览器会阻止弹出窗口出现在这种情况下。来自Facebook FB.login docs:
调用FB.login会导致JS SDK尝试打开弹出窗口 窗口。 因此,只应在用户点击后调用此方法 事件,否则大多数浏览器都会阻止弹出窗口。
答案 1 :(得分:0)
当您点击关闭按钮时,您将获得reponse.status='unknown'
。所以你必须在你的代码中检查这一点。使用此代码
FB.login(facebook_login, { scope: 'email, publish_actions, user_birthday' });
function facebook_login(response) {
if (response.status === 'connected') {
console.log('connected');
}
else if (response.status === 'not_authorized' || response.status=='unknown') {
FB.login(facebook_login, { scope: 'email, publish_actions, user_birthday' });
}
else {
// the user isn't logged in to Facebook.
FB.login(facebook_login, { scope: 'email, publish_actions, user_birthday' });
}
}
注意您必须允许弹出窗口,因为浏览器的弹出窗口阻止程序不允许这样做。所以请检查一下。
答案 2 :(得分:0)
只有在浏览应用程序URL打开应用程序时才会出现此问题。如果在Facebook中查看应用程序(例如:点击Facebook主页左侧边栏上的应用程序链接),FB.Login弹出对话框甚至不会有“关闭”按钮。
此外,如果应用程序在Facebook中运行,则不允许在用户单击取消后重新提示授权。如果用户在用户点击取消后尝试再次请求授权,用户将被重定向到帮助页面,如下所示。
提示用户仅授权应用程序ONCE,然后将其重定向回粉丝页面,或向用户显示类似“请授权应用程序继续”的消息。用一个重新提示按钮。
function facebook_login(response) {
console.log('facebook_login'); //update
console.log(response); //update
if (response.status === 'connected') {
console.log('connected');
}
else {
var dialog = $('<div>').attr({'class':'login-prompt', 'style':'text-align:center'});
var dialog_content = 'Please authorize the app to continue.<br/><input type="button" onclick="$(\'.login-prompt\').dialog(\'close\');FB.login(facebook_login, { scope: \'email, publish_actions, user_birthday\' });" value="OK" />'
dialog.html(dialog_content);
dialog.appendTo('.contentwrapper');
//initialize and show dialog
$('.login-prompt').dialog({ modal: true }).dialog('open');
}
}
因此用户点击取消后会看到类似下面的内容 Re-prompt dialog http://jan.imghost.us/16ts.jpg
注意:如果在Facebook中打开应用,这种重新提示授权方式也只允许两次。