0

我已经使用 javascript SDK 在我的网站中集成了 Facebook 登录。除了身份验证对话框,它只对用户显示一次。下次用户登录时,它会重定向而不显示身份验证对话框。我想要每次用户登录时显示身份验证对话框。这是我正在使用的代码

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

除了身份验证对话框外,一切工作正常,该对话框仅对用户显示一次。下次用户登录时,它会重定向而不显示身份验证对话框。

如果用户已经连接到您的应用程序并已授予所有请求的权限——那么这就是预期的行为。

在这种情况下再次调用 FB.login 将打开弹出窗口,然后立即再次关闭它。

我想在每次用户登录时显示身份验证对话框。

我看不到应用程序以这种方式运行的好处。

无论如何,有一个参数可以明确要求用户重新认证:auth_type=reauthenticate。这将强制用户重新输入密码。有关详细信息,请参阅https://developers.facebook.com/docs/authentication/reauthentication/#client-side

但我不确定这是你真正想要的。

另一种方法是通过您的应用程序删除权限,然后通过scope参数再次请求它们。那应该会再次打开 Auth 对话框。有关详细信息,请参阅https://developers.facebook.com/docs/reference/api/user/#permissions

于 2012-10-15T13:42:56.380 回答