Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript FB登录按钮未进行身份验证_Javascript_Facebook_Facebook Graph Api_Facebook Javascript Sdk_Facebook Login - Fatal编程技术网

Javascript FB登录按钮未进行身份验证

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

我正在尝试集成fb登录。 单击按钮,如果未登录fb,它将请求fb凭据,然后不执行任何操作。 它只需向facebook/connect/ping发送一个post请求,强制状态为302

这是密码

<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在这里结束讨论。这三种情况只是为了检查开发人员,流程是如何进行的-如果用户没有身份验证,没有登录,或者两者都没有。这里已经很好地解释了:。就这样。不要不必要地扩大讨论范围,偏离原来的问题。