BCrypt :: Errors :: InvalidSalt:无效的盐设计

当我尝试创建新用户时,我收到此错误,就像这样

>> User.create(:email=>"nandosousafr@gmail.com", :password => "hello") BCrypt::Errors::InvalidSalt: invalid salt from /Library/Ruby/Gems/1.8/gems/bcrypt-ruby-3.0.1/lib/bcrypt.rb:56:in `hash_secret' from /Library/Ruby/Gems/1.8/gems/bcrypt-ruby-3.0.1/lib/bcrypt.rb:161:in `create' from /Library/Ruby/Gems/1.8/gems/devise-2.1.2/lib/devise/models/database_authenticatable.rb:110:in `password_digest' from /Library/Ruby/Gems/1.8/gems/devise-2.1.2/lib/devise/models/database_authenticatable.rb:37:in `password=' from /Library/Ruby/Gems/1.8/gems/activerecord-3.2.2/lib/active_record/attribute_assignment.rb:85:in `send' from /Library/Ruby/Gems/1.8/gems/activerecord-3.2.2/lib/active_record/attribute_assignment.rb:85:in `assign_attributes' from /Library/Ruby/Gems/1.8/gems/activerecord-3.2.2/lib/active_record/attribute_assignment.rb:78:in `each' from /Library/Ruby/Gems/1.8/gems/activerecord-3.2.2/lib/active_record/attribute_assignment.rb:78:in `assign_attributes' from /Library/Ruby/Gems/1.8/gems/activerecord-3.2.2/lib/active_record/base.rb:495:in `initialize' from /Library/Ruby/Gems/1.8/gems/activerecord-3.2.2/lib/active_record/persistence.rb:44:in `new' from /Library/Ruby/Gems/1.8/gems/activerecord-3.2.2/lib/active_record/persistence.rb:44:in `create' from (irb):3 

>

的Gemfile

 require 'rbconfig' HOST_OS = RbConfig::CONFIG['host_os'] source 'https://rubygems.org' gem 'rails', '3.2.2' # Bundle edge Rails instead: # gem 'rails', :git => 'git://github.com/rails/rails.git' gem 'mysql2' # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails', '~> 3.2.3' gem 'coffee-rails', '~> 3.2.1' gem "compass-rails" # See https://github.com/sstephenson/execjs#readme for more supported runtimes # gem 'therubyracer' gem 'less' gem 'uglifier', '>= 1.0.3' end gem 'jquery-rails' gem 'twitter-bootstrap-rails' gem "friendly_id", "~> 4.0.1" gem "rest-client" gem "haml", ">= 3.1.6" gem "haml-rails", ">= 0.3.4", :group => :development gem "devise", ">= 2.1.0" gem "cancan", ">= 1.6.7" gem "rolify", ">= 3.1.0" gem "therubyracer", :group => :assets, :platform => :ruby gem "simple_form" gem "will_paginate", ">= 3.0.3" gem "paperclip", "~> 2.7" gem "rdiscount" gem 'oily_png' 

User.rb

 class User < ActiveRecord::Base # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, # :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable # Setup accessible (or protected) attributes for your model attr_accessible :email, :password, :password_confirmation, :remember_me end 

我用谷歌搜索,我发现一篇文章,引导我把config.encryptor =:sha1,而不是config.encryptor =:bcrypt,但问题没有解决..

任何人?

如果您尝试重新安装bcrypt-ruby gem怎么办?

  # Remove all versions of bcrypt-ruby sudo gem uninstall bcrypt-ruby # Install the latest version sudo gem install bcrypt-ruby 

重新安装bcrypt-ruby对我没用。

该错误已在bcrypt-ruby> = 3.1.10中 得到修复 ,但Rails 3.2已锁定在bcrypt-ruby 3.0.x上

解决方案是:

  • 转移到更新的Rails版本(> = 4)
  • 使用较旧的Ruby版本(2.1.x)
  • 分叉我的更改并自己跟上安全更新(因为目前Rails 3.2仅支持严格的安全更新)