Приложение iframe для FB JavaScript не выполняет автоматическое перенаправление на страницу входа в FB, если сеанс недоступен

Я занимаюсь разработкой приложения iframe для Facebook с JavaScript. Проблема в том, что пользователь нажимает на URL приложения https://apps.facebook.com/projectanida/. Я хочу, чтобы пользователи видели главную страницу приложения, если они уже вошли в fb и, если сеанс пользователя недоступен, тогда пользователь должен быть автоматически направлен на страницу FB с запросом учетных данных для входа в Facebook для использования моего приложения.

Вот код:

var href = "https://projectafacebook.appspot.com/fb/";
var appliId = "165346656890746";

window.fbAsyncInit = function() {
    FB.init({
        appId: '165346656890746',
        status: true,
        // check login status
        cookie: true,
        // enable cookies to allow the server to access the session
        xfbml: true // parse XFBML
       // sizeChangeCallback();

    });

  FB.Event.subscribe('auth.sessionChange', function (response) {
                               if (response.session) {
                                   //user is logged in!
                                   alert("//user is logged in!");
                                 //  window.location = document.URL;
                               } else 
                               {
                                   alert("//user is not logged in!");
                            windows.top.location.href = 'https://graph.facebook.com/oauth/authorize?client_id=' + appliId + '&redirect_uri=' + href + '&display=page';

                                   }
                            }); 
};
 FB.getLoginStatus(function(response) {
            if (response.session) {
                //alert("session true");
                //$("#fb-root").show();
            } else {
                top.location.href = 'https://graph.facebook.com/oauth/authorize?client_id=' + appliId + '&redirect_uri=' + href + '&display=page';
            }
        });

часть if работает нормально, но когда появляется другая часть, она показывает страницу входа в систему fb, но под синей полосой страницы fb она показывает мое приложение и также доступна, даже если сеанс недоступен... в некоторых случаях она отлично работает в chrome и IE8 но никогда в опере не Firefox.

и если мы войдем в систему на этой странице, она все еще будет перенаправлена ​​на страницу моего приложения в fb, но размер холста будет фиксированным, и мое приложение будет обрезано, где, как будто я сначала войду в систему, а затем нажму на URL своего приложения, тогда приложения работают нормально, а размер холста также подойдет, пожалуйста помоги!

1 ответ

Вы не должны использовать auth.sessionChange больше, попробуйте с auth.statusChange или же auth.authResponseChange,

Также есть ли причина, по которой вы перенаправляете на определенный URL, когда вы обнаружите, что нет сеанса вместо использования FB.login()?

Попробуй это:

FB.Event.subscribe('auth.statusChange', handleUserStateChange);
FB.getLoginStatus(handleUserStateChange);

function handleUserStateChange(response) {
    // User is not logged into Facebook OR hasn't authenticated app
    if(!response.authResponse) {
        // http://developers.facebook.com/docs/reference/javascript/FB.login
        FB.login(function(response) {
            if(response.authResponse) {
                window.location.reload();
            }
        });
    }
}
Другие вопросы по тегам