Safari 11 «предотвращает межсайтовое отслеживание», ломая вход в Facebook - PullRequest
0 голосов
/ 30 января 2019

Когда пользователь включает Safari «предотвращать межсайтовое отслеживание», логин Facebook response.status равен unknown, есть ли способ получить информацию для входа?

Тот же кодотлично работает в Chrome

enter image description here

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Причина проблемы

Если вы используете FB.getLoginStatus, чтобы получить accessToken, в сафари не может работать, так как он разрешаетотслеживание сайта

https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/?locale=en_US

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    ...
    var uid = response.authResponse.userID;
    var accessToken = response.authResponse.accessToken;
  }
 });

Решение

Получите accessToken через code вперенаправленный URL

https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/v2.2?locale=en_us

пример

step1.откройте диалоговое окно OAuth

Ваш redirect_uri - https://www.sample.com.tw/login

 GET https://www.facebook.com/dialog/oauth?
    client_id={app-id}
    &redirect_uri=https://www.sample.com.tw/login

step2.получить код

Вы можете получить код в URL после перенаправления Facebook на вашу страницу, это будет выглядеть так:

https://www.sample.com.tw/login?code=ABCDEFG

step3.получите токен доступа через серверный API

GET https://graph.facebook.com/oauth/access_token?
   client_id={app-id}
   &redirect_uri=https://www.sample.com.tw/login
   &client_secret={app-secret}
   &code=ABCDEFG

Секрет вашего приложения (client_secret) никогда не должен заканчиваться кодом клиента.

0 голосов
/ 30 января 2019

Попробуйте отключить политику cookie.У меня была похожая проблема с Google API, и этот кусок кода решил ее.Надеюсь, это также будет работать для входа в Facebook

auth2 = window.gapi.auth2.init({
    client_id: 'xxx',
    cookiepolicy: 'none',
  });

Ссылка: https://github.com/google/google-api-javascript-client/issues/342

...