Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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 facebook oAuth没有重定向回应用程序_Javascript_Facebook_Jsp_Oauth 2.0 - Fatal编程技术网

Javascript facebook oAuth没有重定向回应用程序

Javascript facebook oAuth没有重定向回应用程序,javascript,facebook,jsp,oauth-2.0,Javascript,Facebook,Jsp,Oauth 2.0,我正在尝试呼叫facebook oauth登录。一旦facebook登录页面出现弹出窗口,它就不会再次重定向到同一应用程序 <html> <head> <script type="text/javascript" src="/mp/struts/js/base/jquery-1.7.1.min.js"></script> <script type="text/javascript" src="/mp/maincommon/stat

我正在尝试呼叫facebook oauth登录。一旦facebook登录页面出现弹出窗口,它就不会再次重定向到同一应用程序

<html>
<head>
   <script type="text/javascript" src="/mp/struts/js/base/jquery-1.7.1.min.js"></script>
   <script type="text/javascript" src="/mp/maincommon/static/js/all.js"></script>
   <script type="text/javascript">
       function onFaceBookAuth(user){
          var id = user['id'];
          var firstName = user['first_name'];
          var lastName = user['last_name'];
          var email = user['email'];

          var params = "applicantId="+id+"&firstName="+firstName+"&lastName="+lastName;
          var xmlhttp;
            if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } 
            else {// code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    var response = xmlhttp.responseText;
                    if(response.indexOf("new") != -1){
                        $('#applicantId').val(id);
                        $('#fbfirstName').val(firstName);
                        $('#fblastName').val(lastName);
                        $('#fbemail').val(email);
                        $('#applicantRegisterForm').submit();
                    }
                    else{
                        window.location = 'applicantHome.jsp?applicantId='+id;
                    }
                }
        };
        xmlhttp.open("POST", "login?mode=2", true);
        xmlhttp.setRequestHeader("Content-type",
                "application/x-www-form-urlencoded");
        xmlhttp.send(params);
    }

    function fbAsyncInit(){
       FB.init({appId: '307292312637177', status: true, cookie: true, xfbml: true});
       FB.getLoginStatus(function(response) {
            var stringArr=JSON.stringify(response);
              if (response.status == 'connected') {
                  fbLoginStatus = true;
                  showLogoutText();
              } 
              else if (response.status == 'not_authorized') {
                  fbLoginStatus = false;
              } 
              else {
                // the user isn't even logged in to Facebook.
                  fbLoginStatus = false;
              }
             });
       FB.Event.subscribe('auth.login', function(response) {
           FB.api('/me', function(user) {
                if (user) {
                    if(user.id!=undefined){
                    onFaceBookAuth(user);
                    }
                }
              });
        });
        FB.Event.subscribe('auth.logout', function(response) {
        });

        FB.api('/me', function(user) {
            if (user) {
                if(user.id!=undefined){
                onFaceBookAuth(user);
                }
            }
          });
    };

   </script>
</head>
<body>
    <div id="facebookLogin" class="fb-login-button" onclick="fbAsyncInit()" data-scope="email">
                            Login with Facebook</div>
</body>
</html>

函数onFaceBookAuth(用户){
var id=用户['id'];
var firstName=user['first_name'];
var lastName=user['last_name'];
var email=用户['email'];
var params=“applicationId=“+id+”&firstName=“+firstName+”&lastName=“+lastName;
var-xmlhttp;
if(window.XMLHttpRequest){//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
} 
else{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var response=xmlhttp.responseText;
if(response.indexOf(“new”)!=-1){
$('#applicationId').val(id);
$('#fbfirstName').val(firstName);
$('fblastName').val(lastName);
$('fbeail').val(电子邮件);
$(“#申请注册表格”)。提交();
}
否则{
window.location='applicationHome.jsp?applicationId='+id;
}
}
};
open(“POST”,“login?mode=2”,true);
setRequestHeader(“内容类型”,
“application/x-www-form-urlencoded”);
xmlhttp.send(params);
}
函数fbAsyninit(){
init({appId:'307292312637177',状态:true,cookie:true,xfbml:true});
FB.getLoginStatus(函数(响应){
var stringArr=JSON.stringify(响应);
如果(response.status==“已连接”){
fbLoginStatus=真;
showLogoutText();
} 
else if(response.status=='not_authorized'){
fbLoginStatus=假;
} 
否则{
//该用户甚至没有登录到Facebook。
fbLoginStatus=假;
}
});
FB.Event.subscribe('auth.login',函数(响应){
FB.api('/me',函数(用户){
如果(用户){
if(user.id!=未定义){
onFaceBookAuth(用户);
}
}
});
});
FB.Event.subscribe('auth.logout',函数(响应){
});
FB.api('/me',函数(用户){
如果(用户){
if(user.id!=未定义){
onFaceBookAuth(用户);
}
}
});
};
使用Facebook登录
弹出窗口即将输入facebook凭据。但是,在此之后,它不会重定向回同一个应用程序

此问题是否与“appId”相关?因为我已经给出了随机数,我不知道“appId”应该给出什么。如何获取我的应用程序的appId


提前感谢

是的,AppId很重要。您的应用程序的AppId可从Facebook开发者页面获得:

在与Facebook API交互之前,您需要注册一个应用程序,为了使oAuth正确重定向,您需要向它提供指向您站点的路径,您可以在上面的url的详细信息表单中设置该路径


在根url上有关于为Facebook开发的更多信息:

我正在本地测试。目前还没有直播。那么,本地主机url注册将起作用吗?不。要测试oAuth集成,您需要使用一个可公开访问的url。@JcFx,这不是真的。验证流的所有相关部分都发生在浏览器内部,并且浏览器知道本地主机是哪台机器。使用当前仅在localhost上运行的应用程序进行身份验证效果非常好,我一直在本地开发时进行身份验证。@CBroe-但我认为Auth只会发回您在应用程序配置中输入的地址?上次测试时,它不会发回本地主机。如果我错了,很乐意接受更正。它不会“发帖”回来,用户的浏览器只是在facebook.com和你的应用程序之间重定向。而且,由于浏览器有责任通过发出另一个(GET-)请求来“跟踪”重定向,所以没有问题……因为,如前所述,您的浏览器/计算机知道谁是本地主机。只要不涉及“ping”,Facebook实际上会尝试自己将数据推送到您的域,或者Facebook必须从您的域读取数据的实例(开放图形对象),在开发过程中使用localhost工作正常。