Различать не вошедшего в систему пользователя Facebook и вошедшего в систему пользователя Facebook, но еще не авторизовать наше приложение - PullRequest
0 голосов
/ 02 декабря 2011

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

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

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

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

  4. Пользователь B одалживает у компьютера , а затем входит в 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 Ответ

1 голос
/ 02 декабря 2011

getLoginStatus () возвращает объект Json, который выглядит следующим образом:

{
    status: one of 'not_authorized' / 'connected' / 'unknown'
    authResponse: ....
}

not_authorized означает, что они вошли в Facebook, но не авторизовали ваше приложение, подключенные означает, что они авторизовали приложение, неизвестный означает, что онине авторизован в Facebook.

(из памяти, поэтому может быть неточным)

Кроме того, вы можете рассмотреть возможность прослушивания событий аутентификации, которые могут облегчить эту проблему.http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

...