0

Прямо сейчас мой код входа в facebook автоматически регистрирует кого-то, когда они посещают страницу. Что плохого.Сделать вход в facebook не запуститься до тех пор, пока не будет нажата кнопка

Как я могу сделать так, чтобы он регистрировал их только в том случае, если они нажмут кнопку входа? Я попробовал несколько вещей, но они, похоже, не работают

<script> 
    // This is called with the results from from FB.getLoginStatus(). 
    function statusChangeCallback(response) { 
    if (response.status === 'connected') { 
     var accessToken = response.authResponse.accessToken; 
     $.post("includes/login.php", { 
      token: accessToken 
     }) 
    .success(function() { 
      location.reload(); 
     }); 
    } 
    } 
    function checkLoginState() { 
    FB.getLoginStatus(function(response) { 
     statusChangeCallback(response); 
    }); 
    } 

    window.fbAsyncInit = function() { 
    FB.init({ 
    appId  : 'xxx', 
    cookie  : true, // enable cookies to allow the server to access 
         // the session 
    xfbml  : true, // parse social plugins on this page 
    version : 'v2.5' // use version 2.2 
    }); 

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

    }; 

    // Load the SDK asynchronously 
    (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')); 

</script> 

<fb:login-button scope="public_profile,email,user_friends,user_birthday,user_location" onlogin="checkLoginState();"> 
</fb:login-button> 
+0

Это то, что _supposed_ произошло. Попытка заставить его вести себя по-другому может быть более сложной проблемой. Вы можете попробовать, а не вызывать 'FB.getLoginStatus', и инициализировать SDK с явным параметром, установленным на _not_, проверить статус входа в систему, но я не знаю, повлияет ли это на' '. Возможно, вам придется заменить его собственной кнопкой, а затем называть «FB.login» при нажатии для входа в систему. – CBroe

ответ

0

Я нашел решение:

Убедитесь, что у вас есть статус: истинный в вашей инициализации в противном случае он будет заблокирован как всплывающее окно , Надежда полностью это помогает кому-то другому.

<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
    appId  : 'xxx', 
    cookie  : true, // enable cookies to allow the server to access 
         // the session 
    xfbml  : true, // parse social plugins on this page 
    version : 'v2.5', // use version 2.2 
    status: true 
    }); 

}; 

// Load the SDK asynchronously 
    (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')); 

$('#facebook').on('click', function() { 
$("#facebook").html('Logging In...'); 
    FB.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 
     var accessToken = response.authResponse.accessToken; 
     $.post("includes/login.php", { 
      token: accessToken 
     }) 
     .success(function() { 
      location.reload(); 
     }); 
     } else if (response.status === 'not_authorized') { 
     login(); 
     } else { 
     login(); 
     } 
    }); 
}); 

function login() 
{ 
    FB.login(function(response) { 
     if (response.authResponse) { 
     var accessToken = response.authResponse.accessToken; 
     $.post("includes/login.php", { 
      token: accessToken 
     }) 
     .success(function() { 
      location.reload(); 
     }); 
     } else { 
      $("#facebook").html('Sign In With Facebook'); 
     } 
    }, {scope: 'public_profile,email,user_friends,user_birthday,user_location'}); 
} 
</script> 
+0

'status: true' _will_ заставьте SDK проверить, зарегистрирован ли пользователь в Facebook и ранее разрешил ваше приложение, поэтому с точки зрения SDK пользователь _will_ уже войдет в ваше приложение. – CBroe

+0

Да, причина, по которой я это делал, состояла в том, что она блокировала всплывающее окно прав на facebook, и это, казалось, исправить. Есть ли лучший способ остановить всплывающее окно от блокировки? – user2570937

+0

Что блокирует всплывающее окно, так это то, что вы не вызываете 'FB.login' непосредственно при взаимодействии пользователя с нажатием на элемент' # facebook', но только в обратном вызове асинхронного вызова FB.getLoginStatus ... который не делает этого подключен непосредственно к первоначальному клику, и поэтому браузер блокирует его. – CBroe

Смежные вопросы