2012-07-20 36 views
1

我得到这个错误,当我尝试创建新的用户,这样BCrypt ::错误:: InvalidSalt:无效盐制定

>> User.create(:email=>"[email protected]", :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 

我GOOGLE了,我发现,导致我把config.encryptor一篇=:SHA1,而不是config.encryptor =:bcrypt,但没有解决问题..

的人?

+0

我假设你在'your_app/config/intializers'文件夹中有'devise.rb'? – 2012-07-20 13:38:48

+0

是的..我试着用sha1代替brypt。但没有.. – 2012-07-20 13:54:42

+0

你可以粘贴你的User.rb和你的Gemfile – 2012-07-20 13:57:02

回答

1

如果您尝试重新安装bcrypt-ruby宝石,该怎么办?

# Remove all versions of bcrypt-ruby 
    sudo gem uninstall bcrypt-ruby 

    # Install the latest version 
    sudo gem install bcrypt-ruby 
+1

谢谢,它现在的工作... – 2012-07-23 16:33:16

+0

没问题。很高兴为你工作。 – 2012-07-24 02:21:54

0

重新安装bcrypt-ruby没有为我工作。

bcrypt旁注> = 3.1.10虫子got fixed,但Rails的3.2锁定bcrypt-红宝石3.0.x的

的解决办法是要么:

  • 移动到新的Rails版本(> = 4)
  • 使用旧版本的Ruby(的2.1.x)
  • my changes并跟上安全更新(因为目前Rails 3.2只支持严重的安全更新)
+0

bcrypt-ruby 3.1.9不存在作为宝石, – shigazaru 2016-04-01 13:46:31

+0

是的,它不是尚未发布,不幸的是。你可以直接从Github使用它:'gem“bcrypt-ruby”,github:“codahale/bcrypt-ruby”,ref:“1f9184a”'。链接到提交:https://github.com/codahale/bcrypt-ruby/commit/1f9184a8df2b90fa02d01a32a364eefc9072e1b9 – yukas 2016-04-01 20:47:24

+0

不,宝石已被重命名为只是'bcrypt' – shigazaru 2016-10-21 03:13:26