Facebook вход - без перенаправления после входа - PullRequest
0 голосов
/ 11 марта 2020

Я использую кнопку входа в Facebook, и после успешного входа в систему перенаправление отсутствует, я пытаюсь перенаправить на ту же страницу, и страница не перезагружается.

Мой скелетный код (здесь не запускается никакая функция, меня интересует только перенаправление):

<div id="fb-root"></div>
<script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v6.0&appId=881911462250499&autoLogAppEvents=1"></script>

<script>
window.fbAsyncInit = function() {



 FB.init({
      appId      : 'my id',
      cookie     : true,                     // Enable cookies to allow the server to access the session.
      xfbml      : true,                     // Parse social plugins on this webpage.
      version    : 'v6.0'           // Use this Graph API version for this call.
    });

FB.getLoginStatus(function(response) {

                   FB.api('/me', { locale: 'tr_TR', fields: 'email,name' }, function (response) {

                    });
});

}
</script>

Я установил действительные URI перенаправления OAuth здесь, на Facebook Разработчики здесь:

enter image description here

Когда я обновляю страницу sh вручную после успешного входа в систему, я вижу, что я вошел в систему и у меня есть токен. Кажется, он просто не перенаправляется, когда я нажимаю кнопку и вхожу в систему. В чем может быть причина?

Ответы [ 2 ]

1 голос
/ 11 марта 2020

URL-адреса перенаправления OAuth будут вызываться, когда вы вручную создаете поток входа .

Самый простой и быстрый способ реализовать вход в Facebook - использовать наши официальные SDK для JavaScript, iOS и Android. Мы рекомендуем вам следовать нашим отдельным руководствам для этих платформ.

Однако, если вам нужно реализовать вход в систему через браузер для приложения без использования наших SDK , например, в веб-представлении для нативного пользователя. Настольное приложение (например, Windows 8) или поток входа в систему с использованием полностью серверного кода. Вы можете создать поток входа в систему для себя, используя перенаправления браузера .

Если вы используете кнопку входа FB с Javascript SDK, вместо этого будет вызываться функция обратного вызова .

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

Если вы собираетесь работать с кнопкой входа в FB, вы можете сделать следующее:

javascript

FB.getLoginStatus(response => {
    if (response.status === 'connected') {
        const uid = response.authResponse.userID;
        const accessToken = response.authResponse.accessToken;
        FB.api('/me', { locale: 'tr_TR', fields: 'email,name' }, response => {
            // if you're using jQuery
            $.post(
                "https://your.server/loginEndpoint",
                {
                    provider: 'facebook',
                    uid,
                    accessToken,
                    email,
                    // name
                }, response => {
                    if (response.success) {
                        location.href = "https://your.site/landing-page"
                    }
                }
            )
            // if you using Axios
            Axios.post("https://your.server/loginEndpoint", {
                    provider: 'facebook',
                    uid,
                    accessToken,
                    email,
                    // name
            }).then(response => {
                if (response.success) {
                    location.href = "https://your.site/landing-page"
                }
            });
        });
    }
})

на стороне сервера (псевдокод)

provider = request.provider
uid = request.uid
email = request.email
user = db.findBySocialID(provider, uid, email /* or not */)

if (user) {
    login(user)
    response.send(success: true)
} else {
    response.send(success: false)
}
0 голосов
/ 11 марта 2020

Полагаю, вы могли бы просто обновить sh текущей страницы, используя JavaScript, если вход был успешным. Попробуйте:

location.reload();
...