Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 无效的盐(BCrypt::Errors::InvalidAlt)_Ruby On Rails_Ruby_Bcrypt_Sorcery - Fatal编程技术网

Ruby on rails 无效的盐(BCrypt::Errors::InvalidAlt)

Ruby on rails 无效的盐(BCrypt::Errors::InvalidAlt),ruby-on-rails,ruby,bcrypt,sorcery,Ruby On Rails,Ruby,Bcrypt,Sorcery,自从升级到Ruby 2.2.0后,我在测试中收到以下消息: invalid salt (BCrypt::Errors::InvalidSalt) 我没有发现任何帮助我理解问题的升级通知。我使用的是Rails 4.1.8和Sorcery 0.8.6 还有谁有这个问题吗 更多详情: 我在使用魔法,而不是设计。加密的数据就是密码。 这一切都是从黄瓜试验开始的,有两种情况: 当我把@user发送给邮件发送人准备邮件数据时。代码如下: UserMailer.passphrase\u reset\u通知(

自从升级到Ruby 2.2.0后,我在测试中收到以下消息:

invalid salt (BCrypt::Errors::InvalidSalt)
我没有发现任何帮助我理解问题的升级通知。我使用的是Rails 4.1.8和Sorcery 0.8.6

还有谁有这个问题吗

更多详情:

我在使用魔法,而不是设计。加密的数据就是密码。 这一切都是从黄瓜试验开始的,有两种情况: 当我把@user发送给邮件发送人准备邮件数据时。代码如下:

UserMailer.passphrase\u reset\u通知(@user.deliver)

它生成了我在初始消息中编写的消息的异常。作为一种解决方法,我没有发送@user,而是发送了所需的字段,效果很好。以下是新代码:

UserMailer.passphrase\u reset\u通知(@user.name,@user.email)。传递

但第二种情况是注册。它在dev中失败了,我不得不向user_params添加:salt来修复它。但它并没有修复测试环境中的问题

没有堆栈跟踪,只有一行消息和导致错误的场景行

然后我按“注册” 无效的盐(BCrypt::Errors::InvalidAlt) ./app/controllers/users\u controller.rb:66:in
block in create'
./app/controllers/users\u controller.rb:64:in
create' ./app/controllers/application\u controller.rb:120:in
scope\u current\u租户'
/features/step_definitions/web_steps.rb:53:in
/^(?:| I)按“([^”]*)”$/” 功能/用户/注册。功能:149:in`然后我按“注册”

我删除了用户表中“salt”字段的“null:false”,正如一位社区成员在一篇关于或多或少类似问题的帖子中所建议的那样,这也没有任何帮助


我的主要问题仍然是:Ruby新版本(2.2.0)与此有什么关系?如果我升级产品,可能还有什么惊喜?

我刚刚解决了这个问题。原来它与使用
has\u secure\u password
序列化对象有关(使用
bcrypt Ruby

更具体地说,在Sidekiq试图将参数序列化到对象中以供Redis排队时,类似于以下内容的内容导致了该问题

@user = User.new(
  :firstname => 'Scott',
  :lastname => 'Klein',
  :password => 'mypass',
  :password_confirmation => 'mypass'   
)
@user.save!

# broken
# note that @user.password can still be called here
# and sidekiq will attempt to serialize this whole object using YAML
# and this is the serialization issue that barfs (in the depths of YAML)
UserMailer.delay.new_user_signup(@user)

# fixed
# i just passed the id and then recalled the user record in the mailer class
UserMailer.delay.new_user_signup(@user.id)

我也遇到过类似的问题。调查让我得出结论,bcrypt不能很好地与Psych(用于生成和解析YAML的Ruby系统库)配合使用

现在有一个打开的bcrypt。正在等待gem作者修复它。

**已修复** 这个问题,至少我的,已经解决了。我刚刚从3.1升级了bcrypt gem。
9到3.1.10,就是这样!感谢Oleg在bcrypt帐户上创建了一个问题。

您是在使用Deave gem还是要加密什么?堆栈跟踪将有助于缩小范围。没有帮助。谢谢。异常发生在“保存”上“打电话。当我跟踪代码时,它会立即引发异常!我在使用DelayedJob…但这也是我的解决方案。删除对象(@user),只需传递id,然后在mailer方法中获取对象。相当讨厌的bug。。。你的治疗救了我一天!斑点很好的奥列格。让我们等待BCrypt团队的修复。升级gem也立即对我起作用。谢谢