Механизм Facebook OAuth 2.0 не всегда перенаправляет на redirect_uri при нажатии кнопки отмены - PullRequest
2 голосов
/ 04 декабря 2011

У меня проблема с механизмом Facebook OAuth 2.0.В принципе, все работает хорошо, за исключением одного: когда пользователь перенаправляется на страницу, где он должен авторизовать / разрешать приложение, но нажимает кнопку «Отмена», примерно половину времени он перенаправляется на страницу, указанную вredirect_uri (правильное поведение - поэтому я перенаправляю его на страницу, объясняющую, почему нам нужны разрешения) и примерно половину времени он попадает на домашнюю страницу FB (неправильное поведение).Я просто не могу понять, что я делаю неправильно.Это примерно то, что я делаю:

window.fbAsyncInit = function() 
{
   FB.init({
       appId      : <appid>, // App ID
       channelUrl : 'http://www.mydomain.com/channel.html', // Channel File
       status     : true, // check login status
       cookie     : true, // enable cookies to allow the server to access the session
       oauth      : true, // enable OAuth 2.0
       xfbml      : true  // parse XFBML
   });

   // Additional initialization code here
   FB.getLoginStatus(function(response) 
   {
       //console.log('getLoginStatus response: ',response);
       if (response.authResponse) 
       {
           //user is already logged in and connected
           top.location.href='http://apps.facebook.com/<appname>';
       }
       else
       {
           //app is not authorized or user is logged out
           var redirectURL = 'http://www.facebook.com/dialog/oauth/?client_id='+client_id+'&scope='+scope+'&redirect_uri='+encodeURIComponent('http://apps.facebook.com/<appname>')+'&response_type=token';
           top.location.href = redirectURL;
       }
   });
};

Есть идеи, что я делаю неправильно?Как уже говорилось в противоположном случае, когда пользователь соглашается авторизовать приложение, оно работает просто отлично.Я все еще работаю в режиме «песочницы» и еще не купил сертификат SSL, поэтому я все еще везде ссылаюсь на http вместо https.

Спасибо!

PS Такое странное поведение никогда не происходит, когдапользователь нажимает кнопку «Не разрешать» при запросе дополнительных разрешений в следующий раз, когда пользователь обращается к моему приложению.Например, пользователь входит в систему в первый раз и авторизует приложение, но не допускает дополнительных разрешений.Затем Facebook перенаправляет его на redirect_uri и дает мне access_token, поэтому я перенаправляю пользователя в приложение (пока все хорошо).В следующий раз, когда пользователь получит доступ к приложению, я обнаружу, что он авторизовал приложение, но у меня нет всех необходимых разрешений, поэтому я снова перенаправляю его на механизм OAuth 2.0.На этот раз пользователь AGAIN не разрешает дополнительные разрешения, и Facebook ВСЕГДА перенаправляет пользователя на redirect_uri, что является ожидаемым поведением.

...