如何仅注销我的应用程序而不是我的Facebook帐户?

时间:2014-02-18 08:07:26

标签: javascript facebook facebook-graph-api

我在我的网络应用程序上使用facebook javascript sdk。

我使用graph api登录我的应用程序

当我从我的应用程序退出时,

我的应用程序已注销,我的Facebook帐户也会注销。

如何仅注销我的应用程序而不是我的Facebook帐户?

如果有人为此找到解决方案,请帮助我。

这是我的代码 -

<script type="text/javascript">     

        var button;
        var userInfo;

        window.fbAsyncInit = function() {
            FB.init({ appId: '########', 
                status: true, 
                cookie: true,
                xfbml: true,
                oauth: true});

           showLoader(true);

           function updateButton(response) {
                button       =   document.getElementById('fb-auth');
                userInfo     =   document.getElementById('user-info');
                userdata =   document.getElementById('user-data');
                if (response.authResponse) {
                    //user is already logged in and connected
                    FB.api('/me', function(info) {
                        login(response, info);
                    });

                    button.onclick = function() {
                        FB.logout(function(response) {
                            logout(response);
                        });
                    };
                } else {
                    //user is not connected to your app or logged out
                    button.innerHTML = 'Login';
                    button.onclick = function() {
                        showLoader(true);
                        FB.login(function(response) {
                            if (response.authResponse) {
                                FB.api('/me', function(info) {
                                    login(response, info);
                                });    
                            } else {
                                //user cancelled login or did not grant authorization
                                showLoader(false);
                            }
                        },                                 {scope:'email,user_birthday,status_update,publish_stream,user_about_me'});   
                    }
                }
            }

            // run once with current status and whenever the status changes
            FB.getLoginStatus(updateButton);
            FB.Event.subscribe('auth.statusChange', updateButton);  
        };
        (function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol 
                + '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
        }());


        function login(response, info){
            if (response.authResponse) {
                var accessToken                                 =   response.authResponse.accessToken;

                userInfo.innerHTML                             = '<img src="https://graph.facebook.com/' + info.id + '/picture">' + info.name
                                                                 + "<br /> Your Access Token: " + accessToken;


        button.innerHTML                               = 'Logout';
                showLoader(false);
                document.getElementById('other').style.display = "block";

            }
        }

        function logout(response){
            userInfo.innerHTML                             =   "";
            document.getElementById('debug').innerHTML     =   "";
            document.getElementById('other').style.display =   "none";
            showLoader(false);
        }

        //stream publish method
        function streamPublish(name, description, hrefTitle, hrefLink, userPrompt){
            showLoader(true);
            FB.ui(
            {
                method: 'stream.publish',
                message: '',
                attachment: {
                    name: name,
                    caption: '',
                    description: (description),
                    href: hrefLink
                },
                action_links: [
                    { text: hrefTitle, href: hrefLink }
                ],
                user_prompt_message: userPrompt
            },
            function(response) {
                showLoader(false);
            });

        }
        function showStream(){
            FB.api('/me', function(response) {
                //console.log(response.id);
                streamPublish();
            });
        }           

  function share(){
            showLoader(true);
            var share = {
                method: 'stream.share',
                u: 'http://www.appovative.com/'
            };

            FB.ui(share, function(response) { 
                showLoader(false);
                console.log(response); 
            });
        }



        function setStatus(){
            showLoader(true);

            status1 = document.getElementById('status').value;
            FB.api(
              {
                method: 'status.set',
                status: status1
              },
              function(response) {
                if (response == 0){
                    alert('Your facebook status not updated. Give Status Update   Permission.');
                }
                else{
                    alert('Your facebook status updated');
                }
                showLoader(false);
              }
            );
        }

        function showLoader(status){
            if (status)
                document.getElementById('loader').style.display = 'block';
            else
                document.getElementById('loader').style.display = 'none';
        }

    </script>

2 个答案:

答案 0 :(得分:1)

Facebook使用Oauth2。 注销您的应用程序的方式就是使您当前的身份验证令牌失效。 在datail中解释:

How can I force a facebook access token to expire?

答案 1 :(得分:1)

您不应在客户端SDK中使用App Access Token,因为它可以从那里轻松提取。

请参阅此处的讨论:Use "app access tokens" with the Facebook Javascript SDK?

FB本身也强烈反对这一点:https://developers.facebook.com/docs/facebook-login/access-tokens/

  

请注意,因为此请求使用您的应用秘密,所以绝对不能   在客户端代码或可以反编译的应用程序二进制文件中。   重要的是,您的应用秘密永远不会与任何人共享。   因此,只应使用服务器端代码进行此API调用。