Различать не вошедшего в систему пользователя Facebook и вошедшего в систему пользователя Facebook, но еще не авторизовать наше приложение

У меня есть некоторые проблемы при использовании кода JavaScript для Facebook, пригласить друзей. Подробности:

  1. Пользователь Facebook A уже авторизовал наше веб-приложение и дает нам разрешение на автономный доступ к своим токенам доступа.

  2. Пользователь A вошел в нашу сеть. Система обнаруживает, что А синхронизировал свою учетную запись (в нашей сети) с Facebook, поэтому он получает информацию о А из Facebook.

  3. В том же браузере A откройте новую вкладку и выйдите из Facebook.

  4. Пользователь B заимствует компьютер A, а затем входит в систему Facebook, но со своей учетной записью: пользователь Facebook B.

  5. Он переходит на наш веб (вкладка, которую А уже открыла) и нажимает кнопку "Пригласить друзей". В списке отображаются все друзья пользователя 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'});
            });
    }

Приведенный выше код работает в большинстве случаев, но у него есть проблема:

  1. Если пользователь X вошел в Facebook пользователя X', и он уже авторизовал наше приложение: response.session.uid = X_FacebookId -> хорошо, мы знаем, кто он
  2. Если пользователь X не вошел в Facebook, response.session == undefined
  3. Если пользователь 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/

Другие вопросы по тегам