【问题标题】:Destroy cookies in rails, facebook connect, facebooker plugin在 rails、facebook connect、facebooker 插件中销毁 cookie
【发布时间】:2010-10-28 00:34:42
【问题描述】:

所以我遇到了一种奇怪的情况。我正在为 Rails 使用 Facebooker 插件,我希望用户能够使用他们的 Facebook 个人资料登录和注销。但是,一旦用户注销,如果我刷新页面,它会将他们重新登录。仅当用户使用 facebook connect 登录时。

我认为问题在于流氓 cookie 只是重新实例化会话,因此我最好的猜测是手动销毁 cookie,但老实说,我并不完全确定如何做到这一点。在单击注销之前和之后,我都打印了我的 cookie 列表(来自 request.cookies)。单击注销后,我仍然有这个cookie挥之不去......但不知道如何删除它。

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

在玩了一会儿之后,那个 cookie 甚至都不存在了……但是刷新页面后我又登录了。

我在 localhost 上执行所有这些操作...不确定这是否会导致问题。

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby facebook cookies session


    【解决方案1】:

    销毁本地 cookie 不足以终止 Facebook Connect 会话。只要您在 facebook.com 域上仍有活动会话,connect JS 库就会重新创建已销毁的 cookie,而您无法访问这些 cookie。

    必须通过调用连接库中的注销函数来处理所有注销。

    例如,

    <script>$H.fbconnect.logout();</script>
    

    【讨论】:

    • 遗憾的是这不起作用(至少在 facebooker 中)。它使您退出 facebook,但应用程序 cookie 仍然存在。如果您重新登录 facebook,则该应用会认为您再次连接。
    • 那么,您还需要触发本地注销。这实际上是我在我运行的应用程序中所做的——facebook 注销运行,然后立即触发我们正常的注销过程,例如:$H.fbconnect.logout('/my_logout_script.php');
    【解决方案2】:

    要删除 cookie,您需要再次设置 cookie,并设置过去的过期日期。

    【讨论】:

      【解决方案3】:

      这就是我在用户控制器中的内容

        def logout_facebook
          clear_facebook_session_information
          redirect_to root_url
        end
      

      这就是它的触发方式

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

      这就是我在本地删除 cookie 的方法。

      注意:不要忘记在你的路由中添加一个到 logout_facebook 方法的路由。

      【讨论】:

        【解决方案4】:

        一百万感谢您为如此疲惫的功能提供干净且全面的解决方案。自从我发现几乎所有新的facebooker用户都相信“facebook连接完全退出”这一事实以来,我在过去两周内一直处于空白状态。或者可能只是缺少文档或一些代码摘录,直到日期我无法在 facebooker 封面文档中找到。

        无论如何,远离这一切,转向让我实现它的解决方案......遵循上面的@James B方法。


        显然,我假设你们都已阅读 facebooker 安装、配置和使用说明http://github.com/mmangino/facebooker。 我还使用了一个插件“authlogic_facebook_connect”,您可以在 github.com 的 kalasjocke/authlogic_facebook_connect 页面上找到它。

        现在我假设您已经通过使用 fb_login_button 或 authlogic_facebook_login_button 将您的应用程序配置为使用 facebook connect。单击它,您会看到一个弹出窗口,让您自己登录您的 Facebook 帐户和应用程序的本地帐户。登录后,您将获得一个 facebook_session 来处理在数据库中保存新用户(仅当您愿意时)。

        默认情况下,您不会在 facebook_session 中获得用户的生日和电子邮件地址作为来自 facebook 的响应。要获得它们,您需要在 rhtml 页面的正文标记中的初始化 javascript 中使用类似的内容...

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

        现在,我终于可以退出 Facebook 和我的网站了。

        1. 在您的应用程序的标题内或任何显示登录、注销、登录用户名等的地方...

          :删除 %>

        这两个注销按钮适用于不同类型的用户。谁直接在您的网站上注册,b。谁通过 facebook 注册到您的网站

        1. routes.rb 中 logout_both 的路由

        map.connect "/logout_both", :控制器=>“用户”, :action=>"logout_both"

        1. users_controller.rb 中 logout_both 的操作

          def logout_both current_user_session.destroy #clear_facebook_session_information flash[:notice] = "注销成功!" redirect_to root_path end #方法logout_both结束

        2. 您需要确保控制器中没有定义可能限制 logout_both 操作在没有会话的情况下执行的过滤器。

        3. 哦,是的,如果您想知道为什么“clear_facebook_session_information”会在操作中被注释掉。那么不用担心,在进入这个动作之前你已经退出了facebook,这行就不再需要了。老大,我们正在使用“fb_logout_link”,它首先将您注销,然后将您重定向到这个新操作。

        嗯,就是这样。如果这不这样做............像我一样弄脏你的手......挖进去......自己解决它。 Facebooker很深,但有一个明确的结局!!!

        再次非常感谢 mangino 和 kalasjocke 让 facebook 连接几乎没有对 rails 造成任何痛苦。


        一个澄清的人......在我上面的答案中......有一个小问题,即......注销后,如果你刷新页面......它会再次显示你在你的网站上登录......但是你是成功退出 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-18
          • 1970-01-01
          • 2014-03-29
          相关资源
          最近更新 更多