Как очистить сессию facebook и cookie при использовании devise + omniauth + rails 3? - PullRequest
4 голосов
/ 04 сентября 2011

Я реализовал создание учетной записи и вход в систему с помощью подключения Facebook, используя devise + omniauth на рельсах 3. Однако моя проблема заключается в очистке сеанса Facebook и файлов cookie при выходе пользователя из системы.В настоящее время, когда пользователь выходит из системы, кажется, что он очищает текущий сеанс.Однако, когда пользователь снова входит в систему, он автоматически входит в систему из-за файла cookie Facebook.Мне бы хотелось, чтобы метод sign_out очистил cookie, чтобы при следующем входе в систему пользователь запрашивал вход с помощью facebook.

Прямо сейчас я использую маршрут устройства по умолчанию "devise_for: users".Должен ли я перезаписать его, создав «класс SessionsController

Любая помощь будет высоко ценится!

1 Ответ

1 голос
/ 30 сентября 2011

Чтобы очистить сессию FB, вы должны использовать FB JS SDK.

Итак, вот что я сделал.

Во-первых, init FB JS. Я использовал частичное, но вы можете просто поместить это в макет

<script type="text/javascript">
  window.fbAsyncInit = function() {
    FB.init({
      appId: '[APP_ID]', 
      status: true, 
      cookie: true, 
      xfbml: true});
  };

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

Затем я связал ссылку выхода из системы с функцией FB.logout, которая вызывает destroy_user_session_path в application.js.

$(function() {
  $('#logout').click(function(e) {
    FB.logout(function(response) {
    var url = $('#logout').attr('redirect_url');
    $.ajax({
      url: url,
      type: 'DELETE',
      success: function(msg) {
        window.location = '/';
        }
      });
    });
    e.preventDefault();
  });
});

My application.html.erb.

<% if user_signed_in? %>
  <p><%= link_to "logout", "#", :id => "logout", :redirect_url => destroy_user_session_path %></p>
  <p>Hi, <%= current_user.email %></p>
<% else %>
  <p><%= link_to 'Login with Facebook', '/auth/facebook/' %></p>
<% end %>
...