4

Ruby 2.2.0 にアップグレードしてから、テストで次のメッセージが表示されます。

invalid salt (BCrypt::Errors::InvalidSalt)

問題を理解するのに役立つアップグレード通知は見つかりませんでした。Rails 4.1.8 と Sorcery 0.8.6 を使用しています。

他にこの問題を抱えている人はいますか?

詳細:

私はDeviseではなくSorceryを使用しています。暗号化されたデータがパスワードです。すべては Cucumber テストで始まりました。2 つのケースがあります。 @user をメーラーに送信して、メールのデータを準備していたときです。コードは次のとおりです。

UserMailer.passphrase_reset_notification(@user).deliver

最初のメッセージに書いたメッセージで例外が発生しました。@user を送信する代わりの回避策として、必要なフィールドを送信しましたが、うまくいきました。新しいコードは次のとおりです。

UserMailer.passphrase_reset_notification(@user.name, @user.email).deliver

しかし、2番目のケースはサインアップです。開発に失敗したため、:salt を user_params に追加して修正する必要がありました。しかし、テスト環境の問題は修正されません。

スタック トレースはありません。エラーにつながる私のシナリオの行を含む 1 つのライナー メッセージだけです。

そして、無効なソルト (BCrypt::Errors::InvalidSalt) ./app/controllers/users_controller.rb:66:in block in create' ./app/controllers/users_controller.rb:64:increate' ./app/controllers/application_controller.rb:120:in scope_current_tenant' ./features/step_definitions/web_steps.rb:53:in/^(? :|I )press "([^"]*)"$/' features/users/sign_up.feature:149:in `そして、「サインアップ」を押します'

user テーブルのフィールド「salt」の「null: false」を削除しました。多かれ少なかれ同様の問題に関する投稿でコミュニティ メンバーが提案したように、どちらも役に立ちませんでした。

私の主な質問は同じです: Ruby の新しいバージョン (2.2.0) はこれと何の関係があるのでしょうか? また、製品をアップグレードすると、他にどのような驚きがありますか?

4

3 に答える 3

3

これを修正しました。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)
于 2015-01-05T02:16:41.330 に答える
2

** 修正済み ** 少なくとも私の問題は修正されました。bcrypt gem を 3.1 からアップグレードしました。9 から 3.1.10 で、それでした! bcrypt アカウントの問題を作成してくれた Oleg に感謝します。

于 2015-01-29T22:10:05.717 に答える