1

当我尝试创建新用户时出现此错误,如下所示

>> 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

>

宝石文件

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'

用户.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,但问题没有解决..

任何人?

4

2 回答 2

1

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

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

  # Install the latest version 
  sudo gem install bcrypt-ruby
于 2012-07-21T04:15:22.627 回答
0

重新安装 bcrypt-ruby 对我不起作用。

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

解决方案是:

  • 移动到更新的 Rails 版本 (>=4)
  • 使用旧版 Ruby (2.1.x)
  • fork我的更改并自己跟上安全更新(因为目前 Rails 3.2 仅支持严重的安全更新)
于 2016-03-31T09:17:35.867 回答