Процесс аутентификации пользователя Facebook

#javascript #facebook #facebook-graph-api #oauth-2.0 #facebook-authentication

#javascript #Facebook #facebook-graph-api #oauth-2.0 #facebook-аутентификация

Вопрос:

Я пробую этот пример http://thinkdiff.net/facebook/new-javascript-sdk-oauth-2-0-based-fbconnect-tutorial /

Но я получаю xml-ошибку, в которой говорится, что в разрешении отказано.

Я также изменил идентификатор приложения. Я немного смущен новым пользовательским интерфейсом developers.facebook.com Меня вполне устраивал старый пользовательский интерфейс.

Я не уверен, где я не упоминаю свой URL обратного вызова.

Пожалуйста, помогите мне.

 <div id="fb-root"></div>
        <script type="text/javascript">
            var button;
            var userInfo;

            window.fbAsyncInit = function() {
                FB.init({ appId: '273713715982249', //change the appId to your appId
                    status: true, 
                    cookie: true,
                    xfbml: true,
                    });

               showLoader(true);

               function updateButton(response) {
                    button       =   document.getElementById('fb-auth');
                    userInfo     =   document.getElementById('user-info');

                    if (response.authResponse) {
                        //user is already logged in and connected
                        FB.api('/me', function(info) {
                            login(response, info);
                        });

                        button.onclick = function() {
                            FB.logout(function(response) {
                                logout(response);
                            });
                        };
                    } else {
                        //user is not connected to your app or logged out
                        button.innerHTML = 'Login';
                        button.onclick = function() {
                            showLoader(true);
                            FB.login(function(response) {
                                if (response.authResponse) {
                                    FB.api('/me', function(info) {
                                        login(response, info);
                                    });    
                                } else {
                                    //user cancelled login or did not grant authorization
                                    showLoader(false);
                                }
                            }, {scope:'email,user_birthday,status_update,publish_stream,user_about_me'});   
                        }
                    }
                }

                // run once with current status and whenever the status changes
                FB.getLoginStatus(updateButton);
                FB.Event.subscribe('auth.statusChange', updateButton);  
            };
            (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);
            }());


            function login(response, info){
                if (response.authResponse) {
                    var accessToken                                 =   response.authResponse.accessToken;

                    userInfo.innerHTML                             = '<img src="https://graph.facebook.com/'   info.id   '/picture">'   info.name
                                                                       "<br /> Your Access Token: "   accessToken;
                    button.innerHTML                               = 'Logout';
                    showLoader(false);
                    document.getElementById('other').style.display = "block";
                }
            }

            function logout(response){
                userInfo.innerHTML                             =   "";
                document.getElementById('debug').innerHTML     =   "";
                document.getElementById('other').style.display =   "none";
                showLoader(false);
            }

            //stream publish method
            function streamPublish(name, description, hrefTitle, hrefLink, userPrompt){
                showLoader(true);
                FB.ui(
                {
                    method: 'stream.publish',
                    message: '',
                    attachment: {
                        name: name,
                        caption: '',
                        description: (description),
                        href: hrefLink
                    },
                    action_links: [
                        { text: hrefTitle, href: hrefLink }
                    ],
                    user_prompt_message: userPrompt
                },
                function(response) {
                    showLoader(false);
                });

            }
            function showStream(){
                FB.api('/me', function(response) {
                    //console.log(response.id);
                    streamPublish(response.name, 'I like the articles of Thinkdiff.net', 'hrefTitle', 'http://thinkdiff.net', "Share thinkdiff.net");
                });
            }

            function share(){
                showLoader(true);
                var share = {
                    method: 'stream.share',
                    u: 'http://thinkdiff.net/'
                };

                FB.ui(share, function(response) { 
                    showLoader(false);
                    console.log(response); 
                });
            }

            function graphStreamPublish(){
                showLoader(true);

                FB.api('/me/feed', 'post', 
                    { 
                        message     : "I love thinkdiff.net for facebook app development tutorials",
                        link        : 'http://ithinkdiff.net',
                        picture     : 'http://thinkdiff.net/iphone/lucky7_ios.jpg',
                        name        : 'iOS Apps amp; Games',
                        description : 'Checkout iOS apps and games from iThinkdiff.net. I found some of them are just awesome!'

                }, 
                function(response) {
                    showLoader(false);

                    if (!response || response.error) {
                        alert('Error occured');
                    } else {
                        alert('Post ID: '   response.id);
                    }
                });
            }

            function fqlQuery(){
                showLoader(true);

                FB.api('/me', function(response) {
                    showLoader(false);

                    //http://developers.facebook.com/docs/reference/fql/user/
                    var query       =  FB.Data.query('select name, profile_url, sex, pic_small from user where uid={0}', response.id);
                    query.wait(function(rows) {
                       document.getElementById('debug').innerHTML =  
                         'FQL Information: '   "<br />"   
                         'Your name: '         rows[0].name                                                              "<br />"  
                         'Your Sex: '          (rows[0].sex!= undefined ? rows[0].sex : "")                              "<br />"  
                         'Your Profile: '      "<a href='"   rows[0].profile_url   "'>"   rows[0].profile_url   "</a>"   "<br />"  
                         '<img src="'          rows[0].pic_small   '" alt="" />'   "<br />";
                     });
                });
            }

            function setStatus(){
                showLoader(true);

                status1 = document.getElementById('status').value;
                FB.api(
                  {
                    method: 'status.set',
                    status: status1
                  },
                  function(response) {
                    if (response == 0){
                        alert('Your facebook status not updated. Give Status Update Permission.');
                    }
                    else{
                        alert('Your facebook status updated');
                    }
                    showLoader(false);
                  }
                );
            }

            function showLoader(status){
                if (status)
                    document.getElementById('loader').style.display = 'block';
                else
                    document.getElementById('loader').style.display = 'none';
            }
  

Это код, который я использую, я не для входа в систему, но я не получаю информацию о пользователе.

Комментарии:

1. Можете ли вы опубликовать точную ошибку? И ссылка на живой пример или хотя бы какой-нибудь код?

2. @Abby: s3.amazonaws.com/foofysfacebookapp/facebook.html вот пример ссылки

3. @Abby вот исходный код github.com/mahmudahsan /…

4. Когда вы получаете сообщение об ошибке? Не видя работающего кода или не зная, когда / где возникает ошибка, ее сложно отлаживать

Ответ №1:

Facebook внедрил функцию диалога авторизации на странице настроек приложения Facebook. Теперь вам не нужно писать код для получения пользовательских разрешений. Вы можете сделать это, настроив правильные значения в настройках приложения. получить более подробную информацию можно на http://iforapple.org/?p=436

Ответ №2:

 function fblogin() {
    FB.login(function(response) {
     if(response.session amp;amp; response.perms){
         FB.api('/me', function(response) {

         });
     }
    }, {perms:''});//set the permissions
}
</script>
<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId  : '',//giv ur app id
      status : true, // check login status
      cookie : true, // enable cookies to allow the server to access the session
      xfbml  : true  // parse XFBML
    });
  };

  (function() {
    var e = document.createElement('script');
    e.src = 'https://connect.facebook.net/en_US/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
  }());
</script>
  

Комментарии:

1. Этот код не будет работать завтра! Вам нужно использовать oauth: true в вашем init и response.authResponse вместо сеанса!

2. Теперь я могу войти в систему, но он вообще не отображает информацию о пользователе и не выдает никаких ошибок как таковых.

3. @Pooja: даже после использования кода, который вы предоставили, я просто могу войти в систему, но он не отображает информацию о пользователе pooja: (

4. FB.api(‘/me’, функция (ответ) { оповещение (ответ.email); });

5. Этот код сбивает с толку, существует изолированный </script>, который также выдает синтаксическую ошибку