2013-08-13 2 views
2

Я пытаюсь разрешить пользователю входить через facebook и не перенаправляться с текущей страницы. В настоящее время я использую Rails с omniauth-facebook и создаю для проверки подлинности. Я предполагаю, что лучший способ сделать это через ajax, как только я получил аутентификацию из facebook через Javascript api. Однако я не уверен, что мне нужно передать URL-адрес обратного вызова для omniauth для проверки подлинности. Вот что я в настоящее время (я стараюсь избегать использования JQuery на некоторое время)Использование Omniauth facebook и ajax

:javascript 

    window.fbAsyncInit = function() { 

    // init the FB JS SDK 
    FB.init({ 
     appId  : 'app-id',       // App ID from the app dashboard 
     channelUrl : '//localhost:3000/channel.html', // Channel file for x-domain comms 
     status  : true,        // Check Facebook Login status 
     cookie  : true, 
     xfbml  : true        // Look for social plugins on the page 
    }); 

    // Additional initialization code such as adding Event Listeners goes here 
    document.getElementById('facebook-login').onclick = function(event) { 
     FB.login(function(response) { 

     if (response.authResponse) { 
      var xhr = new XMLHttpRequest(); 
      xhr.onreadystatechange = function() { 
      console.log(xhr); 
      if (xhr.readyState == 4) { 
       console.log(xhr.responseText); 
      } 
      } 
      xhr.open('GET', 'http://localhost:3000/users/auth/facebook/callback', true); 
      xhr.send(null); 

     } else { 
      console.log("Something when horrible wrong"); 
     } 
     }, {scope: ''}); 
    } 
    }; 

    // Load the SDK asynchronously 
    (function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

Дело я больше не уверен, если я звоню свою собственную конечную точку (пользователи/авториз/facebook/обратный вызов), или если мне нужно что-то передать ему. Любая помощь будет принята с благодарностью.

ответ

0

Для меня проблема заключалась в создании запроса GET вместо запроса POST. Изменен на POST, и проблема исчезла.

Я бы оставил его в качестве комментария, так как я не оставляю дополнительной информации, чтобы оправдать это решение, но я новичок в этом (StackOverflow); У меня недостаточно очков, чтобы прокомментировать.

В любом случае, надеюсь, это поможет!

Смежные вопросы