我正在使用我的rails 3 app设计。出于某种原因,使用“记住我”的登录无效。
这可能是由于在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"}}
那里有什么不对吗?
我的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
为什么登录和记忆的任何想法都不起作用?感谢
答案 0 :(得分:20)
这是因为remember_me在params中显示为“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”值一起工作,你可以在Devise :: TRUE_VALUES上添加“on”。 所以在你的config / initializers / devise.rb中只需添加第一行:
Devise::TRUE_VALUES << ["on"]
答案 1 :(得分:1)
Devise remember_user_token cookie可以设置为“仅安全”,在这种情况下,它不能与http上的开发rails服务器一起使用(浏览器永远不会将其发送回服务器)。
检查initializers / devise.rb for rememberable_options = {:secure =&gt;真}
答案 2 :(得分:0)
您是否已将会话设置为 config.timeout_in = 10.minutes ?
如果是这样,请参阅stackoverflow上的这个贡献来解决它solution
答案 3 :(得分:0)
我的问题是User.rb中的这一行(我从Michael Hartl登录机制更新到设计)
before_save :create_remember_token
我评论出来并且有效。
我也有:
User.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