【问题标题】:facebook oAuth is not redirecting back to applicationfacebook oAuth 没有重定向回应用程序
【发布时间】:2012-10-25 21:28:34
【问题描述】:

我正在尝试调用 facebook oauth login。一旦弹出与 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>

弹出窗口来输入 facebook 凭据。但是,之后它不会重定向回同一个应用程序。

这个问题与“appId”有关吗?因为我给了随机数,我不知道给“appId”什么。如何为我的应用获取 appId?

提前致谢

【问题讨论】:

    标签: javascript facebook jsp oauth-2.0


    【解决方案1】:

    是的,AppId 很重要。您的应用程序的 AppId 可从 Facebook 开发人员页面获得:https://developers.facebook.com/apps

    您需要先注册一个应用程序,然后才能与 Facebook API 交互,并且为了让 oAuth 正确重定向,您需要向它提供您网站的路径,您可以在上面的网址。

    在根 url 上有更多关于为 Facebook 开发的信息:https://developers.facebook.com/

    【讨论】:

    • 我正在本地测试。目前还没有直播。那么,localhost url 注册会起作用吗?
    • 没有。要测试 oAuth 集成,您需要使用可公开访问的 url。
    • @JcFx,这不是真的。 Auth 流程的所有相关部分都发生在您的浏览器中,并且您的浏览器知道 localhost 是哪台机器。使用当前仅在 localhost 上运行的应用程序进行身份验证工作得非常好,我在本地开发时一直这样做。
    • @CBroe - 但我认为 Auth 只会发回您在应用配置中输入的地址?当我最后一次测试这个时,它不会发回本地主机。如果我错了,很高兴得到纠正。
    • 它不会“回传”,用户的浏览器只是在 facebook.com 和您的应用程序之间重定向。由于通过发出另一个(GET-)请求来“跟随”重定向是浏览器的责任,所以没有问题……因为,如前所述,您的浏览器/机器知道 localhost 是谁。只要不涉及“ping”,Facebook 实际上会尝试自行将数据推送到您的域,或者 Facebook 必须从您的域中读取数据的实例(Open Graph 对象 f.e.),在 localhost 上工作,同时开发工作正常。
    猜你喜欢
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 2021-11-16
    • 2011-06-27
    • 1970-01-01
    • 2011-06-08
    • 2015-01-26
    • 2016-06-24
    相关资源
    最近更新 更多