Javascript FB登录按钮未进行身份验证
我正在尝试集成fb登录。 单击按钮,如果未登录fb,它将请求fb凭据,然后不执行任何操作。 它只需向facebook/connect/ping发送一个post请求,强制状态为302 这是密码Javascript FB登录按钮未进行身份验证,javascript,facebook,facebook-graph-api,facebook-javascript-sdk,facebook-login,Javascript,Facebook,Facebook Graph Api,Facebook Javascript Sdk,Facebook Login,我正在尝试集成fb登录。 单击按钮,如果未登录fb,它将请求fb凭据,然后不执行任何操作。 它只需向facebook/connect/ping发送一个post请求,强制状态为302 这是密码 <script> var isLoaded=false; window.fbAsyncInit = function() { FB.init({ appId : '{{app_id}}', status : true, x
<script>
var isLoaded=false;
window.fbAsyncInit = function() {
FB.init({
appId : '{{app_id}}',
status : true,
xfbml : true
});
};
isLoaded=true;
function checkIfLoaded() {
if(isLoaded) console.log("LOADED!");
else console.log("NOT YET!");
return false;
}
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js";js.async=true;
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
FB.Event.subscribe('auth.authResponseChange', function(response) {
if (response.status === 'connected') {
onLogin(response);
} else if (response.status === 'not_authorized') {
FB.login();
} else {
FB.login();
}
});
function onLogin(response) {
console.log('login succ');
var status=response.status;
var accessToken=response.authResponse.accessToken;
var expiresIn=response.authResponse.expiresIn;
var signedRequest=response.authResponse.signedRequest;
var userID=response.authResponse.userID;
$("#status").val(status);
$("#accessToken").val(accessToken);
$("expiresIn").val(expiresIn);
$("signedRequest").val(signedRequest);
$("userID").val(userID);
$("#form").submit();
}
</script>
<a href="#" onclick="checkIfLoaded();">Check</a>
<h2>User</h2>
<div class="fb-login-button" data-max-rows="1" data-size="medium" data-show-faces="false" data-auto-logout-link="false"></div>
var isLoaded=false;
window.fbAsyninit=函数(){
FB.init({
appId:“{app_id}}”,
状态:正确,
xfbml:对
});
};
isLoaded=true;
函数checkIfLoaded(){
if(isLoaded)console.log(“LOADED!”);
else console.log(“还没有!”);
返回false;
}
(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id)){return;}
js=d.createElement;js.id=id;
js.src=“//connect.facebook.net/en_US/all.js”;js.async=true;
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);
FB.Event.subscribe('auth.authResponseChange',函数(响应){
如果(response.status===“已连接”){
onLogin(应答);
}else if(response.status===“未授权”){
FB.login();
}否则{
FB.login();
}
});
函数onLogin(响应){
console.log(“登录成功”);
var status=response.status;
var accessToken=response.authResponse.accessToken;
var expiresIn=response.authResponse.expiresIn;
var signedRequest=response.authResponse.signedRequest;
var userID=response.authResponse.userID;
$(“#状态”).val(状态);
$(“#accessToken”).val(accessToken);
$(“expiresIn”).val(expiresIn);
$(“signedRequest”).val(signedRequest);
$(“userID”).val(userID);
$(“#表格”).submit();
}
使用者
在我的应用程序仪表板中,我刚刚添加了一个具有上述站点名称的平台。未配置任何其他内容。问题是,
FB.Event
未订阅,因为在您尝试订阅此事件时,FB
未初始化。有关错误,请参阅控制台,您将看到:
未定义FB
原因是FB对象是在window.fbAsyncInit
下异步定义的,因此无论何时您想要执行API调用或使用FB
都必须在定义FB
后执行
因此,问题的解决方案是,在定义FB
之后(而不是在定义之前)编写FB.event
,如下所示-
window.fbAsyncInit = function() {
FB.init({
appId : '{{app_id}}',
status : true,
xfbml : true
});
// write all your "FB" code here, since the FB is defined now
FB.Event.subscribe('auth.authResponseChange', function(response) {
if (response.status === 'connected') {
onLogin(response);
} else if (response.status === 'not_authorized') {
FB.login();
} else {
FB.login();
}
});
};
不…你可以去你的链接,并检查它,如果你能找到任何你的目的是什么?那个么,若用户登录了,会发生什么呢?我希望它调用onlogin函数。但事实并非如此。你们的代码并没有错。只需
数据自动注销链接=“true”
http://theonetechnologies.com/outsourcing/post/aspnet-login-with-facebook-and-graph-api.aspx
我希望这会有用为什么两次FB.login()代码>?我认为这就足够了,否则{FB.login();}
看有三种情况,你必须处理所有三种情况。我认为你对facebook api的基本知识还不清楚。请遵循教程。但您已经调用了相同的函数:FB.login()代码>用于最后两种情况。但您没有看到在最后两种情况下调用相同的函数吗。如果response.status!='将调用connected',FB.login()。为什么两次elseLets在这里结束讨论。这三种情况只是为了检查开发人员,流程是如何进行的-如果用户没有身份验证,没有登录,或者两者都没有。这里已经很好地解释了:。就这样。不要不必要地扩大讨论范围,偏离原来的问题。