Facebook自定义按钮实施问题

时间:2016-06-11 08:44:42

标签: javascript facebook facebook-graph-api

connect.js

connect.php

我正在尝试使用Facebook SDK创建Facebook登录自定义按钮。我已成功创建并能够通过单击“继续使用Facebook”按钮成功登录。但问题是每当我点击继续Facebook按钮后重定向到会员页面并尝试点击会员页面上的“注销”按钮来杀死自定义按钮创建的会话。它将我重定向到sigin页面。但在几秒钟内它再次将我重定向到成员页面。所以问题出在这里:我一次又一次地重定向到成员页面而无法注销。但是,如果我尝试使用提供的用户名和密码登录没有facebook。我可以毫无问题地登录和注销。上面我给出了代码的链接。

connect.js(包含facebook登录和验证码。)

  function getUserDetails() {
        FB.api('/me?fields=id,name,email,birthday,gender,first_name,last_name,verified,hometown', function(response) {

                var data = {
                    access_token: FB.getAccessToken(),
                    fb_id: response.id,
                    email: response.email,
                    name: response.name,
                    first_name: response.first_name,
                    last_name: response.last_name,
                    birthday:response.birthday,
                    verified: response.verified,
                    hometown:response.hometown.name,
                    gender: response.gender
                };
                $.ajax({
                    url:'connect.php',
                    type: 'POST',
                    dataType: 'JSON',
                     data:  {user:data}
                });


        });

    }


    function statusChangeCallback(response)
    {
        if (response.status === 'connected') {
            $("div.fb-login").hide();
            getUserDetails();
        } else {
            $.ajax({
            url:'connect.php',
                type: 'POST',
                dataType: 'JSON',
                data: {
                    action: 'logout.php'
                }
            });
           }
    }

    function checkLoginState() {
        FB.getLoginStatus(function(response)
        {
            statusChangeCallback(response);
        });
    }
        FB.login(function(response){
           checkLoginState();
         },{scope: 'public_profile,email,user_about_me,user_birthday,user_hometown'}); 

    window.fbAsyncInit = function() {
        FB.init({
            appId      : 'xxxxxx',
            cookie     : true,
            xfbml      : false,
            version    : 'v2.6',
            status     : true, // check login status
            oauth      : true // enable OAuth 2.0

        });

        FB.getLoginStatus(function(response) {
            statusChangeCallback(response);
        });
    };

    (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if(d.getElementById(id)) return;
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));

Connect.php(通过connect.js发送的数据在这里,通过某些方法,它存储在数据库中,用于创建会话变量。)

logout.php :(每当用户点击memberpage.php上给出的注销按钮时,它会将用户重定向到此页面,然后在销毁会话后将用户重定向到sigin页面。)

$session_destroy();

signin.php:

<script src="connect.js"></script>

<button onclick="FB.login()">Continue With Facebook</button>

1 个答案:

答案 0 :(得分:0)

我得到了解决方案。

这是一个&#34; FB.init&#34;在加载或刷新页面时自动调用的函数。它有一个功能&#34; FB.getLoginStatus&#34;因为它一次又一次地调用而且正在创建新会话,因此假装要销毁会话。在登录页面检查会话变量和获取会话变量值的基础上,甚至在使用logouy破坏会话后,使登录页面重定向到成员页面。 但是现在我从FB.init中删除了FB.getLoginStatus函数,现在网站工作正常。