无效盐 (BCrypt::Errors::InvalidSalt)
invalid salt (BCrypt::Errors::InvalidSalt)
自升级到 Ruby 2.2.0 后,我在测试中收到以下消息:
invalid salt (BCrypt::Errors::InvalidSalt)
我没有找到任何升级通知来帮助我理解问题。我正在使用 Rails 4.1.8 和 Sorcery 0.8.6.
还有其他人遇到这个问题吗?
更多详情:
我使用的是 Sorcery 而不是 Devise。加密后的数据就是密码。
这一切都始于 Cucumber 测试,在 2 个案例中:
当我曾经将@user 发送给邮件程序以准备邮件数据时。这是代码:
UserMailer.passphrase_reset_notification(@user).deliver
我在初始消息中写的消息产生了异常。作为一种解决方法,而不是发送@user,我发送了我需要的字段并且它起作用了。这是新代码:
UserMailer.passphrase_reset_notification(@user.name, @user.email).deliver
但第二种情况是注册。它在开发中失败了,我不得不将 :salt 添加到 user_params 来修复它。但它并没有解决测试环境中的问题。
没有堆栈跟踪,只有一条包含导致错误的场景行的衬里消息。
然后我按 "Sign up"
无效盐 (BCrypt::Errors::InvalidSalt)
./app/controllers/users_controller.rb:66:in block in create'
./app/controllers/users_controller.rb:64:in
create'
./app/controllers/application_controller.rb:120:在 scope_current_tenant'
./features/step_definitions/web_steps.rb:53:in
/^(?:|I )press "([^"]*)"$/'
features/users/sign_up.feature:149:在`我按下 "Sign up"'
我删除了用户表中字段 "salt" 的 "null: false",正如社区成员在 post 中关于或多或少类似问题的建议,它没有也无济于事。
我的主要问题还是一样:Ruby 新版本 (2.2.0) 与此有什么关系?如果我升级产品,还有什么惊喜?
我刚刚解决了这个问题。结果发现它与使用 has_secure_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 issue。等待 gem 作者修复它。
** 已修复 **
这个问题,至少我的,是固定的。我刚刚从 3.1 升级了 bcrypt gem。
9 到 3.1.10,就是这样!感谢 Oleg 在 bcrypt 帐户上创建了一个问题。
自升级到 Ruby 2.2.0 后,我在测试中收到以下消息:
invalid salt (BCrypt::Errors::InvalidSalt)
我没有找到任何升级通知来帮助我理解问题。我正在使用 Rails 4.1.8 和 Sorcery 0.8.6.
还有其他人遇到这个问题吗?
更多详情:
我使用的是 Sorcery 而不是 Devise。加密后的数据就是密码。 这一切都始于 Cucumber 测试,在 2 个案例中: 当我曾经将@user 发送给邮件程序以准备邮件数据时。这是代码:
UserMailer.passphrase_reset_notification(@user).deliver
我在初始消息中写的消息产生了异常。作为一种解决方法,而不是发送@user,我发送了我需要的字段并且它起作用了。这是新代码:
UserMailer.passphrase_reset_notification(@user.name, @user.email).deliver
但第二种情况是注册。它在开发中失败了,我不得不将 :salt 添加到 user_params 来修复它。但它并没有解决测试环境中的问题。
没有堆栈跟踪,只有一条包含导致错误的场景行的衬里消息。
然后我按 "Sign up"
无效盐 (BCrypt::Errors::InvalidSalt)
./app/controllers/users_controller.rb:66:in block in create'
./app/controllers/users_controller.rb:64:in
create'
./app/controllers/application_controller.rb:120:在 scope_current_tenant'
./features/step_definitions/web_steps.rb:53:in
/^(?:|I )press "([^"]*)"$/'
features/users/sign_up.feature:149:在`我按下 "Sign up"'
我删除了用户表中字段 "salt" 的 "null: false",正如社区成员在 post 中关于或多或少类似问题的建议,它没有也无济于事。
我的主要问题还是一样:Ruby 新版本 (2.2.0) 与此有什么关系?如果我升级产品,还有什么惊喜?
我刚刚解决了这个问题。结果发现它与使用 has_secure_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 issue。等待 gem 作者修复它。
** 已修复 ** 这个问题,至少我的,是固定的。我刚刚从 3.1 升级了 bcrypt gem。 9 到 3.1.10,就是这样!感谢 Oleg 在 bcrypt 帐户上创建了一个问题。