Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FacebookAPI-JavaScriptSDK:状态显示';已连接';注销后_Javascript_Angularjs_Facebook_Facebook Graph Api_Facebook Javascript Sdk - Fatal编程技术网

FacebookAPI-JavaScriptSDK:状态显示';已连接';注销后

FacebookAPI-JavaScriptSDK:状态显示';已连接';注销后,javascript,angularjs,facebook,facebook-graph-api,facebook-javascript-sdk,Javascript,Angularjs,Facebook,Facebook Graph Api,Facebook Javascript Sdk,我正在AngularJS网站上使用Facebook sdk for javascript 我正在尝试使用Facebook登录预先填充注册表。第一次,facebook模式出现,我输入我的信息,它登录,我得到我需要的数据,正如预期的那样 然后我完成注册,登录系统。并注销系统,同时执行Facebook注销 然后我回去创建第二个注册,希望用不同的facebook帐户测试注册 但是,当我点击Facebook登录来预先填充表单时,sdk没有再次显示Facebook登录模式以供我输入新登录,而是使用我以前的数

我正在AngularJS网站上使用Facebook sdk for javascript

我正在尝试使用Facebook登录预先填充注册表。第一次,facebook模式出现,我输入我的信息,它登录,我得到我需要的数据,正如预期的那样

然后我完成注册,登录系统。并注销系统,同时执行Facebook注销

然后我回去创建第二个注册,希望用不同的facebook帐户测试注册

但是,当我点击Facebook登录来预先填充表单时,sdk没有再次显示Facebook登录模式以供我输入新登录,而是使用我以前的数据执行登录

当我去查看原因时,我发现facebook的状态显示为“已连接”。我本来希望断开连接,因为我已成功执行了facebook注销

我错了吗? 如何断开第一个用户在第二次注册时使用不同facebook帐户的连接?

要登录,我将使用:

var deferred = $q.defer();
FB.getLoginStatus(function(response) {
    if (response.status === 'connected') {
        console.log('already logged in.');
        deferred.resolve(response);
    }
    else {                    
        FB.login( function(response) {
            if (response.authResponse) {
                console.log('response: ' + JSON.stringify(response));
                var access_token = response.authResponse.accessToken;
                console.log('access token: ' + access_token);    
                console.log('Welcome!  Fetching your information.... ');
                deferred.resolve(response);                            
            } else {
                console.log('User cancelled login or did not authorize.');
                deferred.reject('Error occured');
            }
        }, {
            scope: 'public_profile, email, user_birthday',
            return_scopes: true
        });
    }                        
});    
return deferred.promise;
我的注销是这样的:

var deferred = $q.defer(); 
FB.logout(function(response) {  

    // I've tried with and without this line of code: 
    FB.Auth.setAuthResponse(null, 'unknown');           

    console.log('FB service logged out');
    deferred.resolve(response);
});
return deferred.promise; 

从这个引用中,我尝试使用
FB.Auth.setAuthResponse(null,'unknown')在注销后,但它对我不起作用。

我遇到了一个类似的问题,并通过在用户profile中使用一个Facebook断开连接按钮来解决它,该按钮调用API:

DELETE /{user-id}/permissions/

例如,使用Javascript SDK:

//删除权限,以便要求用户再次验证应用程序
//或者其他用户可以在登录弹出窗口的右上角登录
FB.api(“/me/permissions”、“delete”{
access\u令牌:user.accessToken//使用数据库中的现有令牌
},(r)=>{
if(r.success)user.accessToken=null;//删除数据库中的令牌
});

您确定已从Facebook注销吗?只有当用户在登录到你的应用程序时登录到Facebook时,注销才会这样做。如果他们以前已经登录过Facebook,那么它只会将他们从你的应用程序中注销。(如果你将SDK设置为自动识别返回的用户,那么后者有点毫无意义,因为一旦他们访问你的网站,它会自动再次登录。)它不是一个应用程序,而是一个网站(我会在我的问题中更新)。因此,我在网站上有一个facebook登录按钮,打开facebook模式进行登录,并返回一些用户数据。我用这些数据登录我的网站。。。稍后,当我从该网站注销用户时,我也会调用facebook注销。我不知道为什么,但它似乎没有按预期工作。这是一个应用程序,它只是在网站平台上运行。//同样,如果用户以前已经登录过Facebook,那么这不会让他们从Facebook注销。如果他们登录到Facebook,JSSDK将在下一次页面加载时“识别”他们。你要这个干什么?由于人们只允许拥有一个个人Facebook帐户,在同一台设备上登录和注销多个用户并不是一个常见的用例……好吧,想象一下,不同的人共享同一个桌面。比如在网吧里。我的网站有一个“连接facebook”按钮。如何从facebook sdk注销用户?我的期望是sdk能够识别登录到当前facebook页面的返回用户,并自动登录。但是,sdk不应推断登录过的facebook帐户每次都是相同的,因为人们可以断开与facebook的连接并重新连接到其他帐户。您知道在注销时删除会话的方法吗?“它仍然存在。@jamesemanon您必须更准确地说明您指的是哪个会话/注销。您是指用户在Facebook上注销,还是从您的网站注销?另请参见我的应用程序上的用户注销(不适用于facebook)。但我打开了多个选项卡,我可能是从fb应用程序登录的。但是,当我从应用程序中呼叫注销时,应该会清除所有内容。。没有。它仍然允许用户绕过登录(在这个测试示例中是me)。我还尝试删除注销回调上的权限,但没有成功。Facebook只是为您提供身份验证,您的应用程序(很可能!)将有一个单独的会话/帐户系统,该系统仅与Facebook帐户链接。这在很大程度上取决于您使用的框架/等。如果您使用vanilla FB API,而不使用其他任何东西,那么它也应该跨选项卡使用FB.logout()。