Почему я не могу утешить.войдите в систему доступа Facebook после входа в систему и перенаправьте на URL-адрес после?

#javascript #facebook #oauth #facebook-javascript-sdk #facebook-php-sdk

Вопрос:

У меня есть страница, где у меня есть кнопка, которая запускает функцию FB.login, и я пытаюсь ее утешить.зарегистрируйте доступ после того, как статус ответа «подключен», и я также хочу перенаправить на страницу в качестве теста, window.location.href но ни то, ни другое не работает.

Когда я вхожу в систему, появляется всплывающее окно, и после успешного входа в систему это всплывающее окно закрывается, и я все еще на начальной странице с кнопкой входа в систему, но, похоже, ничего не происходит с любым кодом, который я помещаю в свой оператор if. Документация facebook довольно расплывчата, и в ней нет хороших примеров того, что мне нужно сделать после входа в систему.

 function fb_login() {

        FB.login(function(response){
             

            if(response.status === 'connected'){
                var accessToken = response.authResponse.accessToken;
                console.log(accessToken)
        
                 window.location.href = "https://google.com";
        
            }
        
        });

    }   
        
 

Это кнопка html:

 <div data-scope="public_profile,email,pages_read_engagement,pages_show_list" class="fb-login-button" data-width="" data-size="large" data-button-type="continue_with" data-layout="default" data-auto-logout-link="true" data-use-continue-as="true"></div>
 

Комментарии:

1.если внутри if заявления ничего не происходит, возможно response.status !== 'connected' , попробуйте console.log(response.status) до того, как if

2. ничто не регистрируется даже до инструкции if.

3. а как насчет консоли? войти раньше FB.login ?

4. Я получаю ответ неопределенный

5. ну да, я не сказал console.log(response) , так как это остановит запуск вашего кода. Так fb_login() что выполняется, и FB.login() выполняется, так как вы получаете всплывающее окно … но в обратном вызове ничего нет — очень странно. Есть ли еще какие-либо выходные данные в консоли, которые могут быть полезны для отладки?

Ответ №1:

Хорошо, я неправильно понял поток. Исправление состояло в том, чтобы удалить функцию fb_login, так как кнопка уже запускала всплывающее окно для входа в систему. Затем я добавил data-onlogin="loginStatus()" кнопку html для запуска FB.getLoginStatus , и теперь я могу получить доступ к маркеру на странице и отправить его на сервер, если это необходимо.

 <div data-onlogin="loginStatus()" data-scope="public_profile,email,pages_read_engagement,pages_show_list" class="fb-login-button" data-width="" data-size="large" data-button-type="continue_with" data-layout="default" data-auto-logout-link="true" data-use-continue-as="true"></div>
 
 function loginStatus(){
    
        FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
        // The user is logged in and has authenticated your
        // app, and response.authResponse supplies
        // the user's ID, a valid access token, a signed
        // request, and the time the access token 
        // and signed request each expire.
        var uid = response.authResponse.userID;
        var accessToken = response.authResponse.accessToken;
        console.log(accessToken)
        } else if (response.status === 'not_authorized') {
        // The user hasn't authorized your application.  They
        // must click the Login button, or you must call FB.login
        // in response to a user gesture, to launch a login dialog.
        } else {
        // The user isn't logged in to Facebook. You can launch a
        // login dialog with a user gesture, but the user may have
        // to log in to Facebook before authorizing your application.
        }
        });     

    }