2

我在http://csharpsdk.org/docs/web/getting-started中做了这个例子,它可以工作。
但是 javascript 是不断执行的,所以他不断地在服务器上发帖。
总是调用重定向到 About.aspx 的处理程序,并在代码隐藏中读取名称、ID 和其他用户信息。

form.setAttribute("action", '/FacebookLogin.ashx');

在我的 MasterPage 中,我有 < div id="fb-root"> 和标签 < body> 之后的脚本代码(在正文内)。
在我的 Default.aspx 中,我有登录按钮。

你能帮助我吗?

4

3 回答 3

2

按照这个例子,我也遇到了同样的问题,我的问题原来是在我的 FacebookLogin.ashx 处理程序页面上,我重定向回原来的 aspx 页面,该页面包含我的 JavaScript 代码。输入此代码后,JavaScript 再次执行我的身份验证,从而使我陷入无限循环。

我最终做的是从这里获取一些 JavaScript 的副本,它为您提供 JavaScript 中的持久会话变量。并在提交帖子的代码周围放置一个条件。这样我只打了一次 FacebookLogin.ashx 处理程序,不会让我陷入循环。

这是我正在使用的代码:

            FB.Event.subscribe('auth.authResponseChange', function (response) {
            if (response.status === 'connected') {
                // the user is logged in and has authenticated 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;

                if (sessvars.fbauthenticated == undefined) {
                    sessvars.fbauthenticated = "1";

                    // Do a post to the server to finish the logon
                    // This is a form post since we don't want to use AJAX
                    var form = document.createElement("form");
                    form.setAttribute("method", 'post');
                    form.setAttribute("action", '/FacebookLogin.ashx');

                    var field = document.createElement("input");
                    field.setAttribute("type", "hidden");
                    field.setAttribute("name", 'accessToken');
                    field.setAttribute("value", accessToken);
                    form.appendChild(field);

                    document.body.appendChild(form);
                    form.submit();
                }

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

if (sessvars.fbauthenticated == undefined) {的条件行阻止我的代码多次发布到服务器。

希望这可以帮助

于 2012-08-21T16:56:24.500 回答
0

在这里的另一个演示中,有些人说这是本地主机上的 ie9/chrome 和 cookie 的问题。指向 127.0.0.1 并在 iis 上运行它是否为我解决了这个问题。

于 2012-08-11T23:48:21.083 回答
0

将您的 AppId 更改为实际的 facebook 应用程序 id,您在注册应用程序后获得

FB.init({
  appId      : 'YOUR_APP_ID', // App ID
  status     : true, // check login status
  cookie     : true, // enable cookies to allow the server to access the session
  xfbml      : true  // parse XFBML
});

//这应该解决你的问题

于 2012-08-10T23:11:35.057 回答