0

JavaScript SDK を使用して自分の Web サイトに Facebook ログインを統合しました。ユーザーに対して 1 回だけ表示される認証ダイアログ ボックスを除いて、すべて正常に動作しています。次にユーザーがログに記録すると、認証ダイアログ ボックスを表示せずにリダイレクトされます。ユーザーがログインするたびに認証ダイアログボックスを表示します。これは私が使用しているコードです

window.fbAsyncInit = function() {
        FB.init({
        appId  : 'xxxxxxxx',
        status : true, 
        cookie : true, 
        xfbml  : true, 
        oauth  : true 
        });
        if (window!=window.top) {
            FB.Canvas.setAutoResize();
        };
        FB.getLoginStatus(function(response) {
            if (response.authResponse) {                
               window.FBlogin = function(){
                    FB.login(function(response) {
                        if (response.authResponse) {                         
                    FB.api('/me', function(response) {
                    console.log('Good to see you, ' + response.name + '.');
                     var query = FB.Data.query('select name,username, email, hometown_location, sex, pic_square from user where uid={0}', response.id);
                     query.wait(function(rows) {
                     //document.getElementById('name').innerHTML = '<img src="' + rows[0].pic_square + '" alt="" />';
                        var name=rows[0].name;
                        var email=rows[0].email;
                        var uid=response.id;
                        var username=rows[0].username;
                        var pic=rows[0].pic_square;                    
                     });
    });

                        } 
                        else {
                            alert("error");

                        }                       
                    }, {scope: 'email'});                                       
                };           
            }
            else {

                var authbox = document.getElementById('FBauth');
                authbox.innerHTML="";
                var a = document.createElement('a');
                a.setAttribute("href","javascript:void();");
                a.setAttribute("onclick","FBlogin();");              
                authbox.appendChild(a);
                window.FBlogin = function(){
                    FB.login(function(response) {
                        if (response.authResponse) {
                        FB.api('/me', function(response) {
                        console.log('Good to see you, ' + response.name + '.');
                     var query = FB.Data.query('select name,username, email, hometown_location, sex, pic_square from user where uid={0}', response.id);
                     query.wait(function(rows) {
                        var name=rows[0].name;
                        var email=rows[0].email;
                        var uid=response.id;
                        var username=rows[0].username;
                        var pic=rows[0].pic_square;                     
                     });
                  });                           
                } 

                    }, {scope: 'email'});
                };                
            }           
        });
 FB.Event.subscribe('auth.login', function () {
         FB.api('/me', function(response) {
                    console.log('Good to see you, ' + response.name + '.');
                     var query = FB.Data.query('select name,username,email, hometown_location, sex, pic_square from user where uid={0}', response.id);
                     query.wait(function(rows) {
                        var name=rows[0].name;
                        var uid=response.id;
                        var email=rows[0].email;
                        var username=rows[0].username;
                        var pic=rows[0].pic_square;
                        var page='';
                        $('<input />').attr({'type':'hidden', 'id':'fbname','value':email}).appendTo('#fbaccess');
                  });
               })         
         });

        FB.Event.subscribe('auth.logout', function(response) {            
    });
};
4

1 に答える 1

0

ユーザーに対して1回だけ表示される認証ダイアログボックスを除いて、すべてが正常に機能しています。次回ユーザーがログに記録すると、認証ダイアログボックスは表示されずにリダイレクトされます。

ユーザーがすでにアプリに接続していて、要求されたすべての権限を付与している場合、これは意図された動作です。

この状況でFB.loginを再度呼び出すと、ポップアップが開き、すぐに再度閉じます。

ユーザーがログに記録するたびに、認証ダイアログボックスを表示したいと思います。

このように動作するアプリのメリットはわかりません。

とにかく、ユーザーに再認証を明示的に要求するパラメーターがあります:auth_type=reauthenticate。これにより、ユーザーはパスワードを再入力する必要があります。詳細については、 https://developers.facebook.com/docs/authentication/reauthentication/#client-sideを参照してください。

しかし、これがあなたが実際に望んでいるものかどうかはわかりません。

もう1つの方法は、アプリを介してアクセス許可を削除scopeしてから、パラメーターを介してアクセス許可を再度要求することです。これにより、Authダイアログが再び表示されます。詳細については、https://developers.facebook.com/docs/reference/api/user/#permissionsを参照してください。

于 2012-10-15T13:42:56.380 に答える