【问题标题】:Devise - remember me not working? LocalHost Issue?设计 - 记得我不工作吗?本地主机问题?
【发布时间】:2011-05-13 03:55:43
【问题描述】:

我正在使用我的 rails 3 应用程序设计。由于某种原因,使用“记住我”的登录功能无法正常工作。

这可能是由于在 localhost:3000 上进行的测试造成的吗?

在 devise.rb 中,我有以下设置:

config.remember_for = 2.weeks

在日志中,当我发布登录信息时,我看到:

Started POST "/users/sign_in" for 127.0.0.1 at Thu May 12 20:53:04 -0700 2011
  Processing by SessionsController#create as HTML
  Parameters: {"signIn"=>"LOG IN", "authenticity_token"=>"GR09TIq4uSbu6UWxDRhpfQeLWp7qtJTxkCFksLmFzdE=", "utf8"=>"✓", "user"=>{"remember_me"=>"on", "password"=>"[FILTERED]", "email"=>"xxxx@xxxxxxx-inc.com"}}

有什么问题吗?

我的 session_controller.rb 中也有以下内容

class SessionsController < Devise::SessionsController

  prepend_before_filter :require_no_authentication, :only => [ :new, :create ]
  include Devise::Controllers::InternalHelpers

  # GET /resource/sign_in
  def new
    clean_up_passwords(build_resource)
    render_with_scope :new
  end

  # POST /resource/sign_in
  def create
    resource = warden.authenticate!(:scope => resource_name, :recall => "new")
    #set_flash_message :notice, :signed_in
    sign_in_and_redirect(resource_name, resource)
  end

  # GET /resource/sign_out
  def destroy
    #set_flash_message :notice, :signed_out if signed_in?(resource_name)
    sign_out_and_redirect(resource_name)
  end

  protected

  def after_sign_in_path_for(resource)
    if resource.is_a?(User) && resource.banned?
      sign_out resource
      flash[:error] = "This account has been suspended."
      root_path
    else
      super
    end
  end


end

您知道为什么登录和记忆不起作用吗?谢谢

【问题讨论】:

  • 当我关闭浏览器并返回 localhost:3000 url 时,我必须重新登录。我还看到 cookie 没有设置过期日期

标签: ruby-on-rails ruby-on-rails-3 devise


【解决方案1】:

发生这种情况是因为 remember_me 以“on”的形式出现在参数中,但与 Devise::TRUE_VALUES 进行比较,它们是 [true, 1, '1', 't', 'T', 'true', 'TRUE' ].

让它发挥作用的最简单方法是确保你的 remember_me 是其中一个值。复选框示例(notice value="1"):

<input type="checkbox" name="user[remember_me]" value="1" checked="checked" />

如果您想让它与“on”值一起工作,您可以将“on”添加到 Devise::TRUE_VALUES。 所以在你的 config/initializers/devise.rb 中添加第一行:

Devise::TRUE_VALUES << ["on"]

【讨论】:

    【解决方案2】:

    Devise remember_user_token cookie 可以设置为“仅安全”,在这种情况下,它不适用于 http 上的开发 Rails 服务器(浏览器永远不会将其发送回服务器)。

    检查 initializers/devise.rb 中的 rememberable_options = {:secure => true}

    【讨论】:

      【解决方案3】:

      您是否也使用 config.timeout_in = 10.minutes 设置了会话?

      如果是这样,请参阅 stackoverflow 上的这个贡献,它解决了它solution

      【讨论】:

        【解决方案4】:

        我的问题是 User.rb 中的这一行(我从 Michael Hartl 登录机制更新到设计)

        before_save :create_remember_token
        

        我把它注释掉了,它起作用了。

        我也有:

        用户.rb

        class User < ActiveRecord::Base
          # Include default devise modules. Others available are:
          # :token_authenticatable, :confirmable,
          # :lockable, :timeoutable and :omniauthable
          devise :database_authenticatable, :registerable,:token_authenticatable,
                 :recoverable, :rememberable, :trackable, :validatable
        

        在 devise.rb 上,我只添加了 Devise::TRUE_VALUES &lt;&lt; ["on"] 并取消了注释 config.remember_for = 2.weeks

        【讨论】:

          猜你喜欢
          • 2011-07-19
          • 2014-07-25
          • 1970-01-01
          • 1970-01-01
          • 2013-06-12
          • 2015-03-20
          • 2015-10-15
          • 2018-06-27
          相关资源
          最近更新 更多