Различать не вошедшего в систему пользователя Facebook и вошедшего в систему пользователя Facebook, но еще не авторизовать наше приложение
У меня есть некоторые проблемы при использовании кода JavaScript для Facebook, пригласить друзей. Подробности:
Пользователь Facebook A уже авторизовал наше веб-приложение и дает нам разрешение на автономный доступ к своим токенам доступа.
Пользователь A вошел в нашу сеть. Система обнаруживает, что А синхронизировал свою учетную запись (в нашей сети) с Facebook, поэтому он получает информацию о А из Facebook.
В том же браузере A откройте новую вкладку и выйдите из Facebook.
Пользователь B заимствует компьютер A, а затем входит в систему Facebook, но со своей учетной записью: пользователь Facebook B.
Он переходит на наш веб (вкладка, которую А уже открыла) и нажимает кнопку "Пригласить друзей". В списке отображаются все друзья пользователя B, а не пользователя A.
Этот сценарий (хотя и очень редко встречающийся) беспокоит наших групповых тестировщиков, поскольку он может вызвать непредвиденное поведение нашего веб-приложения (пользователь может подумать, что он синхронизировал неправильную учетную запись Facebook).
Чтобы прекратить это дело, я хочу разграничить, кто в данный момент вошел в Facebook (пользователь B), и пользователь авторизовал наше приложение (пользователь A). В настоящее время я проверяю так:
function showInvitationDialog() {
FB.init({
appId:'${appId}',
cookie: false,
status: true,
xfbml: true
});
FB.getLoginStatus(function (response) {
if (response.session) {
if (response.session.uid != ${fbId}) {
alert("You are currently logged in to FB with another account (different to the account you registered). Please make sure that you don't accidently use others FB account to invite");
return;
}
}
var request_ids = FB.ui({ method: 'apprequests',
message: '<@spring.message code="friends.invitation.message" />',
data: 'hello'});
});
}
Приведенный выше код работает в большинстве случаев, но у него есть проблема:
- Если пользователь X вошел в Facebook пользователя X', и он уже авторизовал наше приложение: response.session.uid = X_FacebookId -> хорошо, мы знаем, кто он
- Если пользователь X не вошел в Facebook, response.session == undefined
- Если пользователь X вошел в систему с помощью пользователя Facebook X', и он еще не авторизовал наше приложение, response.session == undefined
Поэтому я не могу отличить случай 2 от случая 3. В обоих случаях результаты getLoginStatus одинаковы, но я хочу решить их по-разному:
- case 2 -> продолжить вызывать функцию, чтобы всплывающее окно "Диалог входа в систему"
- case 3 -> информирует пользователя, что он вошел в неправильную учетную запись Facebook.
Есть ли решение для этой ситуации? Любая идея будет принята с благодарностью.
1 ответ
getLoginStatus() возвращает объект Json, который выглядит следующим образом:
{
status: one of 'not_authorized' / 'connected' / 'unknown'
authResponse: ....
}
not_authorized означает, что они вошли в Facebook, но не авторизовали ваше приложение, подключено означает, что они авторизовали приложение, неизвестное означает, что они не вошли в Facebook.
(по памяти, так что не может быть точным)
Кроме того, вы можете рассмотреть возможность прослушивания аутентификационных событий, которые могут облегчить эту проблему. http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/