Уничтожить куки в рельсах, facebook connect, плагин facebooker - PullRequest
4 голосов
/ 21 мая 2009

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

Я думаю, что проблема в том, что мошеннические куки-файлы просто восстанавливают сессию, и поэтому я предпочитаю уничтожить куки-файлы вручную, но, честно говоря, я не совсем уверен, как это сделать. Я распечатал свой список файлов cookie (из request.cookies) как до, так и после нажатия кнопки «Выйти». После выхода из системы у меня все еще остается этот файл cookie ... но я не знаю, как его удалить.

fbsetting_0b78c8f2c95ce671470bdcb1c19e5070 {"connectState": 1, "oneLineStorySetting": 1, "shortStorySetting": 1, "inFacebook": false}

После того, как поигрался с этим, этого cookie даже нет ... но после обновления страницы я снова вошел в систему.

Я делаю все это на локальном хосте ... не уверен, должно ли это вызвать проблему или нет.

Есть идеи?

Ответы [ 4 ]

6 голосов
/ 19 октября 2009

Это то, что у меня в контроллере пользователей

  def logout_facebook
    clear_facebook_session_information
    redirect_to root_url
  end

и вот как это срабатывает

<%= fb_logout_link("Logout out", "#{root_url}users/logout_facebook")%>

Вот так у меня получилось удалить куки с локальной стороны.

Примечание: не забудьте добавить маршрут к методу logout_facebook в ваших маршрутах.

3 голосов
/ 22 мая 2009

Уничтожение локальных файлов cookie недостаточно для завершения сеанса Facebook Connect. Библиотека JS для подключения будет воссоздавать уничтоженные файлы cookie, если у вас еще есть активный сеанс в домене facebook.com - и эти файлы cookie вам недоступны.

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

например,

<script>$H.fbconnect.logout();</script>
0 голосов
/ 24 июля 2010

миллион, спасибо за чистое и полное решение для такой измотанной функциональности. За последние 2 недели я буквально стал пустым с тех пор, как натолкнулся на факт, который, как я полагаю, почти для всех пользователей NEW-facebooker, «выход из Facebook полностью завершен». Или, может быть, это просто отсутствие документации или выдержка из кода, которую я не смог найти до сих пор в документах на обложке facebooker.

Как бы то ни было, переходя к решению, которое помогло мне достичь его ... Следуя описанному выше методу @James B.


Очевидно, я предполагаю, что вы все прочитали инструкции по установке, настройке и использованию facebooker http://github.com/mmangino/facebooker. Я также использовал плагин «authlogic_facebook_connect», который вы можете найти на странице github.com в kalasjocke / authlogic_facebook_connect.

Теперь я предполагаю, что вы уже настроили ваше приложение для работы с Facebook connect, используя fb_login_button или authlogic_facebook_login_button. Нажав на нее, вы увидите всплывающее окно для входа в свою учетную запись Facebook и локальную учетную запись вашего приложения. После входа вы получите facebook_session для сохранения нового пользователя в вашей БД (только если вы этого хотите).

По умолчанию вы не будете получать день рождения и адрес электронной почты пользователей в facebook_session как ответ от facebook. Чтобы получить их, вам нужно что-то вроде этого в javascript инициализации в теге body страницы rhtml ...

<%= fb_connect_javascript_tag %>   <%=
init_fb_connect "XFBML",{
:app_settings=>" {
permsToRequestOnConnect :
'email,user_birthday' }"} %>
<%= authlogic_facebook_login_button %>

Теперь, наконец, то, что я сделал для выхода из Facebook и моего сайта.

  1. Внутри заголовка вашего приложения или там, где будут отображаться ЛОГИН, ЛОГОТИП, имя пользователя и т. Д. ...

    :удалять %>

Две кнопки выхода из системы предназначены для разных пользователей .. a. кто зарегистрирован прямо на вашем сайте, б. кто зарегистрировался на вашем сайте через фейсбук

  1. Маршрут для logout_both в маршрутах. Rb

map.connect "/ logout_both", : Контроллер => "пользователи", : Действие => "logout_both"

  1. Действие для logout_both внутри users_controller.rb

    def logout_both current_user_session.destroy #clear_facebook_session_information flash [: note] = "Выйти успешно!" redirect_to root_path end # Конец метода logout_both

  2. Необходимо убедиться, что в контроллере не определены фильтры, которые могли бы ограничить выполнение действия logout_both без сеанса.

  3. О да, и если вам интересно, почему эта «clear_facebook_session_information» комментируется в действии. Тогда не волнуйтесь, вы уже вышли из Facebook перед тем, как войти в это действие, эта строка больше не нужна. Босс, мы используем "fb_logout_link", который сначала выходит из системы, а затем перенаправляет вас на это новое действие.

Ну, вот и все. Если этого не происходит ........ пачкайте руки, как я делаю .. копайтесь ... решайте сами. Facebooker глубокий, но имеет определенный КОНЕЦ !!!

Еще раз большое спасибо mangino & kalasjocke за то, что он сделал подключение к Facebook практически безболезненным для рельсов.


Одно уточнение, люди ... в моем ответе выше .. Есть хик, который ... После выхода из системы, если вы обновите страницу ... это снова покажет, что вы вошли на свой сайт ... как бы вы ни были успешно вышел из Facebook. Я был не прав, ОДНА БОЛЬШАЯ РАЗЪЯСНЕНИЕ ...... На самом деле вам НУЖНЫ ЭТИ ДВЕ ЛИНИИ В ВАШЕМ "logout_both" действии

def logout_both <br/>
      current_user_session.destroy<br/>
      clear_facebook_session_information  #MANDATORY TO COMPLETELY CLEAR COOKIES<br/>
      reset_session  # TO BE 100% sure you can use it optionally<br/>
      flash[:notice] = "Logout successful!"<br/>
      redirect_to root_path   <br/>
end
0 голосов
/ 22 мая 2009

Чтобы удалить куки, вам нужно снова установить куки с датой истечения в прошлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...