Ruby on rails 轨道&x2B;具有自定义用户模型的ActiveAdmin(不含Desive):

Ruby on rails 轨道&x2B;具有自定义用户模型的ActiveAdmin(不含Desive):,ruby-on-rails,ruby,ruby-on-rails-4,activeadmin,Ruby On Rails,Ruby,Ruby On Rails 4,Activeadmin,我正在将ActiveAdmin与自定义User模型(无designe)和自定义sessioncontroller一起使用。我成功地安装了ActiveAdmin,实现了必要的方法,但遇到了一个问题:在第一次访问仪表板后,用户的记住\u令牌从Cookie(我在浏览器中发现)中删除,导致用户注销并重定向到网站主页 在Rails日志中,对用户模型进行了以下更改: D, [2015-03-06T18:08:38.412548 #29316] DEBUG -- : User Load (0.2ms)

我正在将
ActiveAdmin
与自定义
User
模型(无
designe
)和自定义
sessioncontroller
一起使用。我成功地安装了
ActiveAdmin
,实现了必要的方法,但遇到了一个问题:在第一次访问仪表板后,用户的
记住\u令牌从Cookie(我在浏览器中发现)中删除,导致用户注销并重定向到网站主页

在Rails日志中,对用户模型进行了以下更改:

D, [2015-03-06T18:08:38.412548 #29316] DEBUG -- :   User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."remember_token" = $1  ORDER BY login ASC LIMIT 1  [["remember_token", "d983c4abdc252ffc04a71260513ace78534a4c2b"]]
D, [2015-03-06T18:08:38.538903 #29316] DEBUG -- :    (0.1ms)  BEGIN
D, [2015-03-06T18:08:38.539994 #29316] DEBUG -- :   SQL (0.2ms)  UPDATE "users" SET "remember_token" = $1, "updated_at" = $2 WHERE "users"."id" = $3  [["remember_token", "5c40d43f2df2a0dfcbd0bc3a40496bf3eb5bf8a7"], ["updated_at", "2015-03-06 14:08:38.539165"], ["id", 22]]
D, [2015-03-06T18:08:38.593651 #29316] DEBUG -- :    (53.4ms)  COMMIT
D, [2015-03-06T18:08:38.594675 #29316] DEBUG -- :   User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."remember_token" = $1  ORDER BY login ASC LIMIT 1  [["remember_token", "da39a3ee5e6b4b0d3255bfef95601890afd80709"]]
config/initializers/active_admin.rb

ActiveAdmin.setup do |config|
  config.site_title = "Coordinate"
  config.authentication_method = :authenticate_admin_user!
  config.logout_link_path = :sign_out
  config.logout_link_method = :delete
  config.batch_actions = true
end
app/controllers/application_controller.rb

  def authenticate_admin_user!
    unless current_admin_user
      flash[:error] = "Access error!"
      redirect_to root_path 
    end 
  end 

  def current_admin_user
    return nil if signed_in? && !current_user.admin?
    current_user
  end 
app/helpers/sessions\u helper.rb

  def sign_in(user)
    remember_token = User.new_remember_token();
    cookies.permanent[:remember_token] = remember_token;
    user.update_attribute(:remember_token, User.encrypt(remember_token));
    self.current_user=user;
  end 

  def current_user
    remember_token= User.encrypt(cookies[:remember_token]);
    @current_user ||= User.find_by(remember_token: remember_token);
  end 


  def current_user?(user)
    user==current_user;
  end 

  def signed_in?
    !current_user.nil?
  end 

  def sign_out()
    current_user.update_attribute(:remember_token, User.encrypt(User.new_remember_token));
    cookies.delete(:remember_token);
    self.current_user=nil;
  end

请帮助解决此问题。

当前用户为零。对吧?


似乎您没有根据cookies中的
记住\u标记对其进行初始化。您应该在
authenticate\u admin\u user中初始化它方法。

我决定在配置文件ActiveAdmin中设置值
config.logout\u link\u path=false
,对,
当前用户
nil
。但是,当cookie为空时初始化时,“您的应用程序可以在客户端上存储少量数据(称为cookie),这些数据将在请求甚至会话之间持久化”——来自。这是否意味着您的
记住\u令牌
应该在Cookie中(Rails在请求期间解析Cookie头并初始化
Cookie
属性)。尝试输出
cookies
值并检查它。在
登录
my
后,记住存储在cookies中并可在我的应用程序的不同页面上使用的令牌。但是,在仪表板上输入后,
用户
模型中的
记住\u令牌
将被更改,并从cookie中删除。不知道为什么。但是
authenticate\u admin\u用户
Cookie不包含
记住\u令牌
。然而,我理解了您误解的原因:
当前\u用户
不是一个变量,它是帮助者(我忘了在主帖子中指定它)。我更新了我的问题。可能,您是否使用任何浏览器扩展来删除cookie?尝试检查它,并尝试检查浏览器请求中的
Cookie
标题使用浏览器开发人员工具。