rails 4,activeAdmin,设为不为admin_user保存reset_password_token

时间:2016-01-28 07:48:20

标签: ruby-on-rails ruby ruby-on-rails-4 devise activeadmin

我正在使用ActiveAdmin通过提供电子邮件创建其他管理员,并设置了一个阻止重置密码到新添加的电子邮件:

class AdminUser < ActiveRecord::Base
  after_create { |admin| admin.send_reset_password_instructions }

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, 
         :recoverable, :rememberable, :trackable, :validatable


  def password_required?
    new_record? ? false : super
  end
end

但是,我开始收到reset token invalid错误,并且在检查时发现reset_password_token没有被保存。

当我尝试调试时,我将错误追溯到设计的Recoverable模块(recoverable.rb文件)的set_reset_password_token方法的方法:

def set_reset_password_token
  raw, enc = Devise.token_generator.generate(self.class, :reset_password_token)

  self.reset_password_token   = enc
  self.reset_password_sent_at = Time.now.utc
  self.save(validate: false)
  raw
end

令牌已生成,但当我在self行之前检查self.save(validate: false)时,self.reset_password_token没有附加任何内容,它为零。

为了让我最终复杂化,当我现在手动运行行self.reset_password_token = enc并且self.reset_password_token实际上现在保存令牌,保存后,并检查数据库,reset_password_token新保存的AdminUser仍为零。

这可能会发生什么?

  

但请注意:devise test suit on git表明情况不应如下所示:

test 'should not clear reset password token for new user' do
  user = new_user
  assert_nil user.reset_password_token

  user.send_reset_password_instructions
  assert_present user.reset_password_token

  user.save
  assert_present user.reset_password_token
end

0 个答案:

没有答案