铁轨上的红宝石 - 设计 - 还记得我不工作吗?本地主机问题



我正在将 devise 与我的 rails 3 应用程序一起使用。由于某种原因,使用"记住我"登录不起作用。

这可能是由于在本地主机上的测试: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"}}

那里有什么问题吗?

我的sessions_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

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

发生这种情况是因为remember_me参数中作为"on"出现,但与Devise::TRUE_VALUES进行比较,它们是[true, 1, '1

', 't', 'T', 'true', 'TRUE']。

最简单的方法是确保您的remember_me作为该值之一。复选框示例(通知值="1"):

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

另一种方法,如果你想让它与"on"值一起工作,你可以将"on"添加到Devise::TRUE_VALUES。所以在你的配置/初始值设定项/devise.rb 中,只需添加为第一行:

Devise::TRUE_VALUES << ["on"]

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

Check initializers/devise.rb for rememberable_options = {:secure => true}

您是否也设置了 config.timeout_in = 10.分钟的会话?

如果是这样,请参阅堆栈溢出上的此贡献,以解决其解决方案

我的问题是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 << ["on"]和未注释config.remember_for = 2.weeks

相关内容

  • 没有找到相关文章

最新更新