Когда пользователь включает Safari «предотвращать межсайтовое отслеживание», логин Facebook response.status равен unknown, есть ли способ получить информацию для входа?
response.status
unknown
Тот же кодотлично работает в Chrome
Причина проблемы
Если вы используете FB.getLoginStatus, чтобы получить accessToken, в сафари не может работать, так как он разрешаетотслеживание сайта
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
code
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
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) никогда не должен заканчиваться кодом клиента.
Попробуйте отключить политику cookie.У меня была похожая проблема с Google API, и этот кусок кода решил ее.Надеюсь, это также будет работать для входа в Facebook
auth2 = window.gapi.auth2.init({ client_id: 'xxx', cookiepolicy: 'none', });
Ссылка: https://github.com/google/google-api-javascript-client/issues/342