0

嗨,我使用的是非官方的fb Coldfusion SDK,我不得不将其全部从使用 CFscript 转换为传统的 cffunctions,因为我仍在 CF7 上。一切似乎都在工作,但我不确定为什么在服务器端登录时尝试查找 cookie 时找不到它。它在 Chorme 上似乎很好,但 FF、IE 和 Opera 都有相同的问题。

在 index.cfm 上,我有一个 fb:login 按钮,按下时会出现登录屏幕,一旦成功登录,index.cfm 刷新就会运行我的 FacebookApp 方法,但在从服务器端读取时返回 access_token 的空白值。这是因为在服务器端我尝试从 cookie 中获取信息,但尚未创建 cookie。我还输出了 access_token 的值,但它返回为空白。当我大约一秒钟后按 F5 时,我现在在输出中看到我的 access_token 的值。同时,如果我使用 js 警报在 getLoginStatus 中显示 access_token,我可以看到该值。

我已经在某些地方阅读了旧版浏览器的 SDK 加载速度很慢以使用 channelURL 参数的情况,我已经完成了,但我仍然得到与上面相同的结果。

有什么建议我能做什么?我尝试添加 js 超时以减慢 getLoginStatus 的速度,因此它有时间读取 cookie,但我没有任何乐趣。请帮忙。

页面顶部我有这个

<!doctype html PUBLIC "-//W3C//Dtd html 4.0 Transitional//EN">
<html xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml">

在body标签之后,我有以下内容

    <div id="fb-root"></div>

            <script>
              window.fbAsyncInit = function() {
                 FB.init({
                  appId  : 'xxxxxxxxxxxxxxxx',
                  cookie  : true, // enable cookies to allow the server to access the session
                  oauth   : true, // OAuth 2.0
                  status  : true, // check login status
                  xfbml   : true, // parse XFBML
                  channelUrl: document.location.protocol + './/www.sitename.com/fbchannel.html' //custom channel
                });

                // whenever the user logs in or logs out, we refresh the page
                FB.Event.subscribe('auth.login', function(response) {
                   window.location.reload();
                   alert('login');
                });

                FB.Event.subscribe('auth.logout', function(response) {
                   window.location.reload();
                   //alert('logout');
                });

                FB.getLoginStatus(function(response) {
                  if (response.status == 'connected') {
                    // the user is logged in and connected to your
                    // app, and response.authResponse supplies
                    // the user's ID, a valid access token, a signed
                    // request, and the time the access token 
                    // and signed request each expire
                    var uid = response.authResponse.userID;
                    var accessToken = response.authResponse.accessToken;

                    //alert('end');
                   // alert('login url called '+unescape(window.location.pathname));
                    // whenever the user logs in we refresh the page

                    //alert(accessToken);

                  } else if (response.status == 'not_authorized') {
                    // the user is logged in to Facebook, 
                    //but not connected to the app
                  } else {
                    // the user isn't even logged in to Facebook.
                  }
                 });

              };

              (function() {
                var e = document.createElement('script');
                e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
                e.async = true;
                document.getElementById('fb-root').appendChild(e);
              }());
            </script>

在上面的东西下面的某个地方我有我的按钮

<fb:login-button scope="publish_stream,email" autologoutlink="true">Connect with FB</fb:login-button>
4

1 回答 1

0

在花了几天时间试图找出问题后,我遇到了这个问题,这让我很开心,问题解决了!谢谢chwk。

于 2011-12-28T01:35:08.373 回答