FB.login Изменения Javascript нужны к октябрю?

Итак, мы перешли с Facebook Connect на новый Javascript SDK и OpenGraph, когда они только появились.

Еще в мае некоторые из наших клиентов получили электронное письмо, в котором сообщалось, что у них могут быть дыры в безопасности и им может потребоваться перейти на Oauth 2.0. Я сравнил наш новый код с документацией для FB.login в то время, и в итоге у меня сложилось впечатление, что клиенты, использующие наш новый материал, будут в порядке, поэтому клиентам старой версии Facebook Connect нашего продукта придется перейти на Последняя версия.

Сегодня мне стало известно, что Javascript SDK был изменен таким образом, что для использования OAuth 2.0 в конце концов необходимо внести изменения в код. (например, этот пост в блоге, который был сделан более чем через месяц после того, как это письмо было отправлено) , и что мне нужно будет обновить его к 1 октября.

Итак, сегодня я попытался просто установить для своего приложения флаг «Миграция Oauth 2.0» в значение true и запустить его с тем же кодом. Это сработало, чего я не ожидал. Итак, мой вопрос: нужно ли мне вносить изменения в код, описанные в связанном сообщении в блоге, или нет? Если приложение работает сегодня с установленным флажком «Миграция Oauth 2.0», является ли это веским основанием для предположения, что оно продолжит работать после 1 октября?

Вот мой код:

// call to FBinit does not include oauth: true
FB.init({appId: opts.ApiKey, status: true, cookie: true, xfbml: true});

// call to login expects response.session on response. not response.authResponse. 
// Shame on Facebook for arbitrarily renaming that so I can't do a clean swap.
FB.login(function(response){
    if(response.session){
        var access_token = response.session.access_token;
        // blah blah blah
    }
});

person Mike Ruhlin    schedule 29.08.2011    source источник


Ответы (3)


Я бы изменил весь код, а также включив O-2.0 и используя старые методы аутентификации, может разорвать сеанс, из-за чего пользователи не смогут выйти из приложения или оставить сеанс в приложении, когда пользователь выходит из Facebook.


С включенным новым O-2.0 и отключенной старой аутентификацией я использую пример ниже, интегрированный с php-sdk 3.1.1 без каких-либо ошибок или проблем.

      <div id="FBauth"></div>
      <div id="fb-root"></div>
<script>
      window.fbAsyncInit = function() {
        FB.init({
    appId  : '112104298812138',
    status : true, // check login status
    cookie : true, // enable cookies to allow the server to access the session
    xfbml  : true, // parse XFBML
    //channelUrl : 'http://WWW.MYDOMAIN.COM/channel.html', // channel.html file
    oauth  : true // enable OAuth 2.0
        });
FB.Canvas.EarlyFlush.addResource("http://shawnsspace.com/index.php");
FB.Canvas.setAutoResize();
            FB.getLoginStatus(function(response) {
              if (response.authResponse) {
                // logged in and connected user, someone you know
                var authbox = document.getElementById('FBauth');
                //authbox.innerHTML="Hey" +authResponse.name+ "";
                authbox.innerHTML="<fb:login-button autologoutlink='true'></fb:login-button><fb:login-button show-faces='true' width='250' max-rows='1'></fb:login-button>";
                FB.XFBML.parse(authbox);
                //var a = document.createElement('a');
                //alert();
              } else {
                // no user session available, someone you dont know
                var authbox = document.getElementById('FBauth');
                authbox.innerHTML="";
                var a = document.createElement('a');
                a.setAttribute("href","javascript:void();");
                a.setAttribute("onclick","FBlogin();");
                a.innerHTML="Please Login";
                authbox.appendChild(a);
                //alert('not logged in'+response+'');
//
        window.FBlogin = function(){
                FB.login(function(response) {
               if (response.authResponse) {
                 FB.api('/me', function(response) {
                 });

               } else {
               top.location.href = "http://apps.facebook.com/shawnsspace/";
                 // user cancealed login.
               }
             }, {scope: 'manage_pages'});
        };
//          
              }
            }); 

        FB.Event.subscribe('auth.login', function(response) {
        top.location.href = 'http://apps.facebook.com/shawnsspace/';
        });
        FB.Event.subscribe('auth.logout', function(response) {
        //top.location.href = "http://facebook.com/designbyshawn";
        });
      };
      (function() {
        var e = document.createElement('script'); e.async = true;
        e.src = document.location.protocol +
          '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
      }());
</script>
person Community    schedule 29.08.2011
comment
Это хорошее предложение, Майк. Я посмотрю, сможем ли мы включить это. - person Cat Lee; 04.09.2011

Да, вам нужно внести изменения в код JS SDK (http://developers.facebook.com/docs/oauth2-https-migration/), чтобы включить oauth:true в функцию FB.init и другие упомянутые изменения. в сообщении в блоге.

Параметр миграции в приложении для разработчиков просто указывает, что вы получите зашифрованный токен доступа (см. всплывающую подсказку).

person Cat Lee    schedule 04.09.2011

Код выше не использует Oauth2. Он по-прежнему будет работать как есть, пока они не решат заставить вас использовать Oauth2.

Чтобы переключиться, вам нужно добавить oauth: true к вызову FB.init, как указано в сообщении блога, на которое вы ссылались. Основное изменение заключается в том, что response.session становится response.authResponse.

Также есть много других изменений, поэтому я рекомендую протестировать его сейчас. Мне потребовалось несколько часов, чтобы перевести наш сайт, но большая часть времени была связана с тем, чтобы файлы cookie работали, потому что с Oauth2 они совершенно разные, и мы хотели сгенерировать access_token из файла cookie.

Вы можете проверить плагин Rails, который я обновил для Oauth2 — https://github.com/imme5150/fgraph код файла cookie находится здесь: https://github.com/imme5150/fgraph/blob/master/lib/fgraph/rails/fgraph_helper.rb внизу. Еще одна хитрость заключается в том, чтобы получить токен доступа из параметра «код», хранящегося в файле cookie, вы делаете вызов графика FB, но вам нужно включить параметр «redirect_uri», но вы хотите, чтобы он был пустым.

Удачи!

person Josh    schedule 31.08.2011