【问题标题】:Devise: How to use remember_me cookie after user sign out?设计:用户退出后如何使用 remember_me cookie?
【发布时间】:2016-06-07 16:58:57
【问题描述】:

我正在开发一个Rails 4.2 应用程序并使用devise gem 进行身份验证。

对于remember_me 功能,设计生成一个cookie remember_user_token,在sign_out 之后被销毁。

有没有办法让Devise 不应该破坏remember_user_token

我尝试在initializer下面configfalse

config.expire_all_remember_me_on_sign_out = false

但这并没有帮助。

退出后我需要该 cookie,以便它填充登录表单。

请帮忙。

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 cookies devise


    【解决方案1】:

    这是 cookie 商店的最低价。首先,cookie 中的所有内容一旦设置或用户以某种方式手动删除 cookie 就会永久存在。这意味着,如果您设置了 user_id 和 user_group_id,它会在 cookie 中永久存在,直到更新或删除。这与会话不同,因为会话就像计算机上的 ram,一旦关闭浏览器,会话以及它的所有数据都会随之关闭。

    1. 因此,这意味着当您注销用户时,您需要指定他们的 cookie 清空您不希望它拥有的任何内容。当您的用户登录时,您可以设置您希望用户在登录时拥有的任何内容。因此,由于会话和 cookie 是完全独立的东西,除非您选择制作它们,否则它们永远不会相互作用。因此,除非您让它这样做,否则您的会话将永远不会将其自身转储到 cookie 存储中。

    2. 每次您的用户访问您的站点时,您都​​可以进行一次握手,以确保 cookie 与数据库匹配(如有必要)。否则,您可能拥有不同的数据,哪些数据仅在登录时更新,或者哪些数据不更新,没有握手,用户必须继续登录以确保它们仍然有效,这违背了首先拥有 cookie 的目的。

    3. 客户端 cookie 存储的缺点是安全问题。根据您使用 cookie 存储数据的方式,一个人可能会劫持您网站上的某人 cookie 并假装他们是他们。这可以通过精心设计来避免,但假设您的 cookie 存储中的任何内容对每个人都是公平的游戏,因此请谨慎使用它并且仅用于非机密数据。

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      将身份验证与表单预填充结合起来不一定是个好主意。成功登录后,您可以将登录信息存储在 cookie 中。你可以在你的SessionsController 中重写create 方法,调用super 来调用Devise::SessionsController#create 并传递一个块。该块将在成功登录后执行,并将用户作为参数接收。

      class SessionsController < Devise::SessionsController
        def create
          super do |user|
            cookies[:login] = user.login
          end
        end
      end
      

      【讨论】:

        猜你喜欢
        • 2019-01-21
        • 2014-10-10
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-21
        相关资源
        最近更新 更多