Facebook &引用;客户端身份验证示例“;在Chrome for OS X上不工作(错误=未知用户) 原职:

Facebook &引用;客户端身份验证示例“;在Chrome for OS X上不工作(错误=未知用户) 原职:,facebook,macos,google-chrome,facebook-javascript-sdk,facebook-login,Facebook,Macos,Google Chrome,Facebook Javascript Sdk,Facebook Login,我试图在Chrome for OS X(17.0.963.83)上使用“Javascript SDK客户端身份验证”。代码直接从Facebook示例中复制(更新您的应用程序ID): Facebook客户端身份验证示例 //异步加载SDK (职能(d){ var js,id='facebook jssdk',ref=d.getElementsByTagName('script')[0]; if(d.getElementById(id)){return;} js=d.createElement('

我试图在Chrome for OS X(17.0.963.83)上使用“Javascript SDK客户端身份验证”。代码直接从Facebook示例中复制(更新您的应用程序ID):


Facebook客户端身份验证示例
//异步加载SDK
(职能(d){
var js,id='facebook jssdk',ref=d.getElementsByTagName('script')[0];
if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
js.src=“//connect.facebook.net/en_US/all.js”;
ref.parentNode.insertBefore(js,ref);
}(文件);
//加载时初始化SDK
window.fbAsyninit=函数(){
FB.init({
appId:'你的应用程序ID',//应用程序ID
channelUrl:'/'+window.location.hostname+'/channel',//频道文件的路径
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
//侦听并处理auth.statusChange事件
FB.Event.subscribe('auth.statusChange',函数(响应){
if(response.authResponse){
//用户已验证您的应用并登录到Facebook
api('/me',函数(me){
如果(我的名字){
document.getElementById('auth-displayname')。innerHTML=me.name;
}
})
document.getElementById('auth-loggedout').style.display='none';
document.getElementById('auth-loggedin')。style.display='block';
}否则{
//用户尚未验证您的应用,或未登录Facebook
document.getElementById('auth-loggedout').style.display='block';
document.getElementById('auth-loggedin')。style.display='none';
}
});
//响应对登录和注销链接的单击
document.getElementById('auth-loginlink')。addEventListener('click',function(){
FB.login();
});
document.getElementById('auth-logoutlink')。addEventListener('click',function(){
FB.logout();
}); 
} 
Facebook客户端身份验证示例
你好
()
当我点击“登录”时,Facebook弹出窗口出现。我点击“使用Facebook登录”,弹出窗口消失,“auth loggedin”div与我的名字和注销链接一起出现。但是,当我刷新页面时,页面将丢失其Facebook授权状态并返回到注销状态

预期的行为是页面保持登录状态

使用控制台,我注意到fbsr cookie临时出现,并在页面刷新后消失。此外,控制台中捕获到以下错误:

不安全的JavaScript试图使用URL访问帧https://s-static.ak.fbcdn.net/connect/xd_proxy.php#cb=f16adb7b1c&origin=http%3A%2F%2F[BASE-DOMAIN]%2Ff22295b918&relation=opener&transport=postmessage&frame=f3e8d40458&access\u-token=[access-token]&expires\u-in=4221&signed\u-request=[signed-request]&BASE\u-DOMAIN=[BASE-DOMAIN]来自具有URL的框架[我的代码URL]#。域、协议和端口必须匹配

我确保通道文件可用,并且无法在OS X上的Firefox或Safari或Windows上的IE、Firefox或Chrome上重现此错误。有什么想法吗?我可以使用服务器端身份验证解决此问题,但如果可能,我更喜欢使用客户端

第一次编辑:进一步测试 所以我现在认为“不安全的JavaScript”错误是一种误导。我正在使用通道文件,但它在Firefox或Chrome中都没有被击中

查看Firefox和Chrome上的网络流量,当页面首次加载时,假设我在两种浏览器上都登录到Facebook,我会看到以下请求正在处理中:

Firefox

  • [facebook url]/dialog/oauth?api_key=[app_id]&app_id=[app_id]&channel_url=https%3A%2F%2Fs static.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%23cb%3Df24509714bbf8d%26origin%3Dhttp%253A%252F%252F%252F[base_domain]%252F[base_]%252 ff193ade24ab412%26关系%3Dparent.parent%26传输%3Dpostmessage&client\id=[app_]显示=none&domain=[base_]&locale=en_US&origin=1&redirect_uri=https%3A%2F%2Fs static.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%23cb%3Df2b6c8dce7b8936%26origin%3Dhttp%253A%252F%252F[base_domain]%252Ff193ade24ab412%26关系%3Dparent%26传输%3Dpostmessage%26frame%3df2112636bf762a&响应类型=2code&sdk=joey令牌

  • [ssl facebook url]/dialog/oauth?api_key=[app_id]&app_id=[app_id]&channel_url=https%3A%2F%2Fs static.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%23cb%3Df24509714bbf8d%26origin%3Dhttp%253A%252F%252F%252F[base_domain]%252Ff193ade24ab412%26关系%3Dparent.parent%26传输%3Dpostmessage&client\id=[app_id]&显示=none&domain]&locale=en_US&origin=1&redirect_uri=https%3A%2F%2Fs static.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%23cb%3Df2b6c8dce7b8936%26origin%3Dhttp%253A%252F%252F[base_domain]%252Ff193ade24ab412%26关系%3Dparent%26传输%3Dpostmessage%26frame%3df2112636bf762a&响应类型=2code&sdk=joey令牌

  • [ssl fbcdn url]/connect/xd_proxy.php#cb=f2b6c8dce7b8936&origin=http%3A%2F%2F[base_domain]%2Ff193ade24ab412&relation=parent&transport=postmessage&frame=f2112636bf762a&code=2.AQBMIMy0rSFAnqaA.3600.1332514800.1-5322361%7CU-rui4on2sbzzdt03ctet-DgQ&signed_请求=[signed_请求]&access_=[signed(域中的访问令牌和访问令牌到期日数=基本令牌=[base\u domain]&https=1

Chrome

  • [facebook url]/dialog/oauth?api_key=[app_id]&app_id=[app_id]&channel_url=https%3A%2F%2Fs-
    <!DOCTYPE html>
    <html>
      <head>
        <title>Facebook Client-side Authentication Example</title>
      </head>
      <body>
        <div id="fb-root"></div>
        <script>
          // Load the SDK Asynchronously
          (function(d){
             var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
             if (d.getElementById(id)) {return;}
             js = d.createElement('script'); js.id = id; js.async = true;
             js.src = "//connect.facebook.net/en_US/all.js";
             ref.parentNode.insertBefore(js, ref);
           }(document));
    
          // Init the SDK upon load
          window.fbAsyncInit = function() {
            FB.init({
              appId      : 'YOUR_APP_ID', // App ID
              channelUrl : '//'+window.location.hostname+'/channel', // Path to your Channel File
              status     : true, // check login status
              cookie     : true, // enable cookies to allow the server to access the session
              xfbml      : true  // parse XFBML
            });
    
            // listen for and handle auth.statusChange events
            FB.Event.subscribe('auth.statusChange', function(response) {
              if (response.authResponse) {
                // user has auth'd your app and is logged into Facebook
                FB.api('/me', function(me){
                  if (me.name) {
                    document.getElementById('auth-displayname').innerHTML = me.name;
                  }
                })
                document.getElementById('auth-loggedout').style.display = 'none';
                document.getElementById('auth-loggedin').style.display = 'block';
              } else {
                // user has not auth'd your app, or is not logged into Facebook
                document.getElementById('auth-loggedout').style.display = 'block';
                document.getElementById('auth-loggedin').style.display = 'none';
              }
            });
    
            // respond to clicks on the login and logout links
            document.getElementById('auth-loginlink').addEventListener('click', function(){
              FB.login();
            });
            document.getElementById('auth-logoutlink').addEventListener('click', function(){
              FB.logout();
            }); 
          } 
        </script>
    
        <h1>Facebook Client-side Authentication Example</h1>
          <div id="auth-status">
            <div id="auth-loggedout">
              <a href="#" id="auth-loginlink">Login</a>
            </div>
            <div id="auth-loggedin" style="display:none">
              Hi, <span id="auth-displayname"></span>  
            (<a href="#" id="auth-logoutlink">logout</a>)
          </div>
        </div>
    
      </body>
    </html>