Ранее сегодня процесс входа в систему Facebook нашего веб-приложения у некоторых пользователей перестал работать. Когда мы пытаемся получить текущий профиль, возвращается ошибка. Он утверждает, что токен доступа, который мы только что сгенерировали, перенаправив пользователя в поток входа в систему OAuth, был отклонен.
Приводится следующая причина:
The access token is invalid since the user hasn't engaged the app in longer than 90 days
Для меня это не имеет смысла, поскольку мы не хранит токен доступа где угодно, кроме текущего сеанса, и воссоздает его каждый раз, когда пользователь входит в систему с помощью Facebook.
Трассировка стека из Spring Social для вызова GET /me
выглядит так:
ERR c.s.f.v.resource.AuthenticationResource Exception when connecting with Facebook
org.springframework.social.RevokedAuthorizationException: The authorization has been revoked. Reason: The access token is invalid since the user hasn't engaged the app in longer than 90 days.
at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.java:85)
at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:59)
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:775)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:728)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:702)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:350)
at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:220)
at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:215)
Проблема, вероятно, связана с изменения в API Facebook, но я не вижу, как это влияет на кратковременные токены доступа, которые мы создаем при каждом входе в систему.
подтверждено, то же самое здесь
Я заметил, что это также происходит с другим веб-приложением, для которого я использовал код Facebook SDK, сообщенный Facebook всего неделю назад.
У нас такая же проблема ... без изменений с нашей стороны ...
Есть новости по этому поводу?
получаю то же сообщение с прошлой ночи (1/5/18)
Аналогичная проблема была и для мобильных устройств, описанная здесь: developers.facebook.com/bugs/992564290891053. Это может быть ошибка в FB. Я подниму там вопрос.
Зарегистрирован баг с FB: developers.facebook.com/bugs/194772814474841
У меня такая же проблема с использованием hello.js, когда я звоню / мне (github.com/MrSwitch/hello.js), поэтому это не ошибка SpringSocial.
Кто-нибудь знает, будет ли выдан новый идентификатор пользователя для пользователя? В настоящее время мы используем уникальный идентификатор пользователя приложения для идентификации зарегистрированного пользователя в нашей базе данных.
У меня такая же проблема с паспортом.js
Я использую react-native-fbsdk
, и у меня такая же проблема. Кто-нибудь знает жизнеспособное обходное решение для react-native?
О чувак. Эта проблема вернулась ко мне.
@MastaBaba взгляни: github.com/mavris/FacebookFix
Спасибо @BlackM. Тем не менее, я использую гибридную аутентификацию.
Добавьте код разрешения в свое приложение
Нравится
Android: fbLoginButton.setReadPermissions (Arrays.asList (EMAIL));
IOS: loginButton.readPermissions = @ [@ "public_profile", @ "email"];
Мое приложение - это веб-приложение, а не мобильное приложение, и я запрашиваю разрешение email
и user_birthday
.
У вас уже есть проблема с запросом разрешения? В моем случае я решаю проблему после добавления разрешения.
Я также использую веб-приложение. И я также уже явно запрашивал определенные разрешения.
Насколько я знаю, разрешение по умолчанию для facebook SDK - это public_profile и электронная почта. если вы не запрашиваете разрешение по умолчанию. Я рекомендую, чтобы у вас было разрешение по умолчанию.
Прежде чем я решу проблему в своем приложении, я не запрашиваю никаких явных разрешений. Но сегодня утром внезапно возникла эта проблема. Итак, я нашел пример кода github для входа в Facebook. Я обнаружил, что часть кода отличается от моего, и образец кода требует разрешения. Наконец я решил проблему в своем приложении. Итак, я думаю, что раньше Facebook SDK поддерживал разрешение по умолчанию, но сегодня оно было изменено.
@KiyoungLee Я просто попробовал и добавил разрешение public_profile
по умолчанию, чтобы убедиться, но это не дало никакого эффекта.
Я нашел эту ссылку в документах FB: Обновление токенов доступа пользователей
В нем упоминается, что через 90 дней пользователи должны повторно установить свой токен, поэтому в случае такой ошибки мы должны просто перенаправить пользователя для повторной регистрации.
Они даже упоминают, что удаляют токены неактивных пользователей в верхней части этого документа. Возможно, они ошиблись и удалили все токены пользователей.
В любом случае решение состоит в том, чтобы перенаправить пользователей на повторную подписку.
Я тоже это нашел. Проблема в том, что в моем случае пользователь просто прошел процесс входа в систему. Мы всегда обновляем токен пользователя и не храним его нигде, как я написал в вопросе.
Это не ВАШ токен, это токен ПОЛЬЗОВАТЕЛЯ, срок их действия истекает каждые 90 дней, поэтому они вынуждают нас в таком случае перенаправлять пользователей для повторной подписки на наше приложение.
Я с @Thomas: я не храню ничего, связанного с процессом входа в систему, а затем инициирую процесс входа в систему. Итак, все, что могло быть истекшим, было просто представлено мне Facebook при попытке войти в систему с помощью Facebook.
Я использую Laravel Socialite и сталкиваюсь с той же проблемой. Я нигде не храню токены и, честно говоря, не знаю, как заставить код отправлять пользователя обратно на «повторную подписку». Насколько я понимаю, это делает Facebook, и похоже, что Facebook сам должен предлагать моим пользователям повторно одобрить приложение, если они видят, что токен недействителен по этой причине.
ответы на facebook:
Thanks for getting in touch. This is actually a known issue that we are already tracking in another bug report.
I'm going to merge your report with the existing one, so we can deal with the issue in one place. Please refer to this thread for updates: http://developers.facebook.com/bugs/194772814474841/
Моим временным решением было использовать JS SDK, в моем случае он работает правильно ...
Это отчет об ошибке, который я подал, как указано в комментарии к моему вопросу. В комментариях к ошибке предлагается несколько обходных путей, но ни один из них не работает для меня. Я не могу перейти на JS SDK. Надеюсь, сегодня мы получим новости от FB.
Обновлять:
Похоже, что проблема была решена Facebook.
Я зарегистрировал ошибку с Facebook, и они в настоящее время (5/3/18) работают над разрешением.
Здесь и в комментариях к ошибке предлагается несколько обходных путей. Обобщить:
auth_type=reauthorize
Я выберу решение №2, поскольку оно кажется наиболее простым.
Я развернул решение №2 в нашей производственной системе, и оно работает в нашем случае.
Мы изменили URL-адрес для входа на https://www.facebook.com/v2.10/dialog/oauth?auth_type=reauthorize&client_id=xxx&state=yyy&response_type=code&sdk=php-sdk-5.6.2&redirect_uri=xxx&scope=email%2Cuser_gender
, но это ничего не изменило. Как вы думаете, мы должны поймать ошибку и затем снова перенаправить пользователя на этот URL?
@MikeReiche, к счастью, тебе больше не нужно ничего делать
Ошибка сохраняется согласно обсуждение
Согласно пользовательскому комментарию упомянутого обсуждения, мы отозвали разрешения у каждого пользователя нашего приложения, и это сработало. Для этого мы использовали следующий api графа конечная точка. Нам пришлось сохранить facebookID пользователей.
С Уважением
В моем случае мне также нужно отозвать разрешения каждого пользователя, даже если я не хранил токены доступа! Любая попытка повторно запросить разрешение также не удалась. Я не понимаю, почему FB не может обрабатывать повторный запрос пользователя автоматически и изящно! Я заметил, что это может быть связано с использованием разрешения user_friends, которое теперь требует дополнительной проверки приложения.
ВРЕМЕННОЕ РЕШЕНИЕ Для iOS вам необходимо изменить код SDK для поддержки повторной авторизации. Чтобы изменить исходный код, вам нужно будет загрузить его с помощью CocoaPods. Затем скопируйте следующие функции над модулями: https://github.com/mavris/FacebookFix
Я столкнулся с этой проблемой, когда наши интеграционные тесты вошли в систему с тестовым пользователем - следующий JSON вернулся из Graph API:
{
"error": {
"message": "The access token is invalid since the user hasn't engaged the app in longer than 90 days.",
"type": "OAuthException",
"code": 190,
"error_subcode": 493,
"fbtrace_id": "F/1z2AsTRx8"
},
"timestamp_microsecond": "2018-05-30 11:22:01.353949"
}
Это было более серьезной проблемой, поскольку наши тестовые пользователи не «взаимодействуют» с приложением как таковым. Чтобы исправить это, мне пришлось:
Как только я проделал все эти шаги, мой тестовый пользователь (и интеграционные тесты) снова заработал.
Спасибо! Та же ситуация, другое исправление. Я просто удалил тестового пользователя и воссоздал его, так как конкретный пользователь для меня не имел значения. Почему это действительно сгенерирует токен доступа, но немедленный сбой - это странно!
Я получаю такой же ответ для одного из своих веб-приложений. Я использую Hybridauth для управления логинами.