Rails:如何对不会过期的 cookie 进行故障排除?



随后,在大多数情况下,Railscast #274 - Remember Me在我的Rails应用程序中设置一个 Remember Me令牌,尽管cookie正在"工作",但cookies.permanent[…] = …cookies[…] = …之间似乎没有区别。

奇怪的是,检查ChromeSafari中的cookie(迄今为止我测试过的所有cookie)分别显示它们在"浏览器关闭"one_answers"会话"时过期。但我可以验证退出和重新启动网站将保留cookie和用户仍然登录!所以,似乎还有别的事情在发生……

我甚至不知道从哪里开始解决这个问题,也没有太多处理Rails cookie和/或行为不端的会话的经验。任何想法?

下面是一些代码:

module SessionsHelper
  def sign_in(user)
    if params[:remember_me]
      cookies.permanent[:remember_token] = user.remember_token
      self.current_user = user
    else
      cookies[:remember_token] = user.remember_token
    end
  end
  def current_user
    @current_user ||= User.find_by_remember_token!(cookies[:remember_token]) if cookies[:remember_token]
  end
  ...

sessions_controller.rb

class SessionsController < ApplicationController
  def new
  end
  def create
    user = User.where('lower(email) = ?', params[:email].downcase).first
    if user && user.authenticate(params[:password])
      sign_in user
      redirect_back_or user 
    else
      flash.now[:error] = 'Invalid email/password combination'
      render 'new'
    end
  end
  def destroy
    sign_out
    redirect_to root_url
  end
end

我今天一直在与这个斗争,它碰巧不是Rails相关,而是Chrome的(我猜Opera也是)。自从Chrome的版本19,当选项继续在我离开设置,他们不遵循标准(章节4.3.1),不删除浏览器关闭的任何cookie。因此,"记住我"功能没有像预期的那样工作,因为您希望在关闭浏览器时删除非永久性cookie。这是在WontFix状态下的chromium bug: http://code.google.com/p/chromium/issues/detail?id=128513

在我的情况下(可能是你的),情况更奇怪,因为我没有使用继续在我离开选项,仍然Chrome浏览器关闭时不删除cookie。在发现这个其他错误后,我意识到它实际上是选项继续运行后台应用程序时,谷歌浏览器关闭阻止这些cookie被删除。我不知道/不记得这个选项是如何在我的浏览器中启用的,或者它现在是否是默认行为…

不管怎么说,我的memorber_me复选框现在按预期工作。希望你的问题也解决了,如果没有,至少这个会对你有所帮助。

相关内容

  • 没有找到相关文章

最新更新