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 ハンドラー ページで、JavaScript コードを保持する元の aspx ページにリダイレクトしていたことが問題であることが判明しました。このコードを入力すると、JavaScript が認証を再度実行したため、無限ループに陥りました。

私がやったことは、ここから JavaScript で永続的なセッション変数を提供する JavaScript のコピーを取得することでした。そして、投稿を送信するコードの周りに条件を配置します。このようにして、FacebookLogin.ashx ハンドラーを 1 回だけヒットし、ループに陥ることはありません。

私が使用しているコードは次のとおりです。

            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

AppId を実際の Facebook アプリ ID に変更します。この 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 に答える
0

ここの別のデモでは、localhost の ie9/chrome と Cookie に問題があると言う人もいました。127.0.0.1 を指定して iis で実行すると、問題が解決しました。

于 2012-08-11T23:48:21.083 に答える