Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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 Rails 5.2.4:密钥必须为32字节_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails 5.2.4:密钥必须为32字节

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

我已经将我的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(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)