设计:用户退出后如何使用remember_me cookie?

时间:2016-02-25 04:40:22

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

我正在处理Rails 4.2应用程序并使用devise gem进行身份验证。

对于remember_me功能,设计会生成一个Cookie remember_user_token,在sign_out之后会被破坏。

有没有办法Devise不应该销毁remember_user_token

我尝试在false

config initializer下面config.expire_all_remember_me_on_sign_out = false

var app = Marionette.Application.extend({ initialize: function(options) { console.log('My container:', options.container); } }); var app = new app({container: '#app'}); //router var MyRouter = Marionette.AppRouter.extend({ appRoutes: { "some/route": "someMethod" }, routes : { "some/otherRoute" : "someOtherMethod" }, someOtherMethod : function(){ // do something here. } });

但它没有帮助。

我在注销后需要该cookie,以便填充登录表单。

请帮忙。

由于

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:-1)

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

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

  2. 每次用户访问您的网站时,您都可以进行一次握手,确保Cookie在必要时与数据库匹配。否则,您可能会有不同的数据,只有在登录时更新或者没有握手的情况下,用户必须继续登录以确保它们仍然有效,这首先违背了cookie的目的。< / p>

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

  4. 希望这有帮助!