我正在网站上工作,希望为我的用户提供使用facebook登录的选项
我成功登录,但事件对我不起作用。
每当我登录时,都没有调用“登录”功能.....我已经尝试将此登录功能分配给其他按钮以手动检查,警报有效,但没有得到任何响应。
我的代码在这里:
<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({appId: MY_APP_ID, status: true, cookie: true, xfbml: true});
FB.Event.subscribe('auth.login', function(response) {
login();
});
};
function login(){
FB.api('/me', function(response) {
alert('You have successfully logged in, '+response.name+"!");
});
}
(function() {
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}()); </script>
<fb:login-button autologoutlink='true'
perms='email,user_birthday,status_update,publish_stream'></fb:login-button>
这是facebook应用程序设置:
答案 0 :(得分:1)
您是否尝试在<head>
而不是#fb-root
中加载all.js脚本?使用以下内容:
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/es_LA/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
而不是:
(function() {
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
[编辑:更新样本]
SDK将元素插入fb-root,期望相对定位 到身体或相对于靠近页面顶部的元素。
也可以替换SDK源 资源:Facebook Javascript SDK。
-
你可以尝试订阅其他活动,看看它是否有效
FB.Event.subscribe('auth.statusChange', function(response) {
// do something with response
});
来自Facebook文档(尝试订阅此代码)
<强> auth.authResponseChange 强>
任何与auth相关的更改都会触发此事件,因为它们都会影响会话:登录,注销,会话刷新。只要用户使用您的应用程序,会话就会随着时间的推移而刷新。<强> auth.statusChange 强>
通常,您需要使用auth.authResponseChange事件。但在极少数情况下,您希望区分这三种状态:
1.已连接
2.登录Facebook但未与您的应用程序连接
3.根本没有登录Facebook。
答案 1 :(得分:0)
场景1(新用户)
Facebook登录按钮的文字:“登录”
用户状态:用户未连接
现在用户点击登录并完成登录流程。
按钮的文字更改为“退出”,这是'auth.login'
触发的唯一时间。
FB.Event.subscribe('auth.login', function (response) {
// do something with response
if (response.status === 'connected') {
// user connected
FB.api('/me', function (response) {
alert(response.name + " " + response.id);
});
}
});
场景2(现有用户)
如果登录Facebook且已经授权您的应用的用户访问您的应用,则用户会自动连接并且登录按钮的文本为“退出”。
在这种情况下,请将以下代码添加到fbAsyncInit function
:
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
// connected
alert(response.name + " " + response.id);
}
});
每次页面刷新时都会调用 FB.getLoginStatus
,但您也可以通过将其嵌入到javascript函数中随时在应用中调用它。