Ruby on rails Rails 5.2.4:密钥必须为32字节
我已经将我的rails应用程序更新为Ruby 2.4.9p362和rails 5.2.4。此代码在更新之前有效:Ruby on rails Rails 5.2.4:密钥必须为32字节,ruby-on-rails,Ruby On Rails,我已经将我的rails应用程序更新为Ruby 2.4.9p362和rails 5.2.4。此代码在更新之前有效: require 'digest' require 'base64' class EncryptionService def self.generateVerificationEmailToken(user) salt = SecureRandom.random_bytes(64) key = ActiveSupport::KeyGenerator.new(Y
require 'digest'
require 'base64'
class EncryptionService
def self.generateVerificationEmailToken(user)
salt = SecureRandom.random_bytes(64)
key = ActiveSupport::KeyGenerator.new(Yanpy::RESET_PASSWORD_KEY).generate_key(salt)
cipher = ActiveSupport::MessageEncryptor.new(key)
encrypted_data = cipher.encrypt_and_sign(user.email) # This line returns error
token = Base64.urlsafe_encode64(salt) + encrypted_data
...
但升级后,我遇到下一个错误:
key must be 32 bytes
70295339497960 /Users/Rober/.rvm/gems/ruby-2.4.9/gems/activesupport-5.2.4/lib/active_support/message_encryptor.rb:169:in `key='
70295339497960 /Users/Rober/.rvm/gems/ruby-2.4.9/gems/activesupport-5.2.4/lib/active_support/message_encryptor.rb:169:in `_encrypt'
70295339497960 /Users/Rober/.rvm/gems/ruby-2.4.9/gems/activesupport-5.2.4/lib/active_support/message_encryptor.rb:151:in `encrypt_and_sign'
我读过其他帖子说这是rails 4.2中修复的一个bug。但我的版本更晚。正如@Pavel所建议的,我实际上用以下方法解决了这个问题:
len = ActiveSupport::MessageEncryptor.key_len
salt = SecureRandom.random_bytes(len)
key = ActiveSupport::KeyGenerator.new(Yanpy::RESET_PASSWORD_KEY).generate_key(salt, len)
试试
。。。Yanpy::重置密码。生成密钥(salt,32)