Вход в Facebook без всплывающих окон?

Я пытаюсь создать простое приложение facebook, но для авторизации кажется, что он всегда блокируется всплывающим блокировщиком. Таким образом, мой код:

FB.init({
        appId  : THEAPPPIDDDD,
            status : true,
            cookie : true,
            xfbml  : true,
   });


FB.login(function(response) {
           if (response.authResponse) {
               FB.api('/me', function(response) {
               FB.logout(function(response) {
                               console.log('Logged out.');
                           });
                   });
           } else {
               console.log('User did not authorize.');
           }
       });

Любая помощь будет принята с благодарностью... спасибо

Ответ 1

Я знаю, что этот вопрос является возможным дубликатом другого вопроса: Остановите блокировщик всплывающих окон facebook Я отправляю это, чтобы помочь Дейву Чжан. Я адаптировал этот код для одного из моих сайтов. В следующем коде замените URL-адрес YOUR_APP_ID и URL-адрес вашего веб-сайта, после чего вход в Facebook будет всплывающим.

//Javascript
var uri = encodeURI('http://example.com');
FB.getLoginStatus(function(response) {
    if (response.status === 'connected') {
        window.location.href=uri;
    } else {
        window.location = encodeURI("https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri="+uri+"&response_type=token");
    }
});

Это будет просто перенаправлять непосредственно, а не открывать всплывающее окно.

Ответ 2

Вы должны инициировать свой код входа при нажатии какой-либо кнопки. Как хорошая практика при работе с FB, процесс регистрации всегда должен начинаться пользователем.

Назовите свой код нажатием кнопки, и он должен исправить вашу проблему.

Ответ 3

чтобы избежать входа в систему через всплывающее окно, вы должны начать проверку подлинности на стороне сервера

Ответ 4

Блокировщик всплывающих окон всегда будет инициировать, если действие всплывающего окна не возникло в результате события, вызванного пользователем. Например, если вы попытаетесь сделать всплывающее окно в событии загрузки, браузер, скорее всего, будет использовать блокировщик всплывающих окон. С другой стороны, если вы вызываете всплывающее окно при событии клика или событии keydown, менее вероятно, что будет активирован блокировщик всплывающих окон.

Вы также можете использовать метод, в котором ваше приложение обнаруживает, было ли всплывающее окно заблокировано. Вы можете прочитать об этом здесь.

Как уже упоминалось в других ответах, если вы предпочитаете процесс аутентификации без всплывающих окон вообще, вам нужно будет обрабатывать это на стороне сервера с помощью OAuth.