UsersController中的NameError - (未初始化的常量SCrypt)

时间:2014-03-04 11:06:13

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 strong-parameters

在我的Rails应用程序中使用 Rails 4.1.0 Ruby 2.1.0

我一直在使用 Authlogic 验证用户身份。

users_controller.rb中,我有一个创建方法,如下所示。

def create
  @user = User.new(user_params) #this line has the error
  respond_to do |format|
    if @user.save
      format.html { redirect_to_target_or_default account_url, notice: 'User was successfully created.' }
    else
      format.html { render action: 'new' }
    end
  end
end

由于强烈建议在Rails 4.0中使用强参数,attr_accessible已从User模型中移除,并且下面的代码已添加到 users_controller.rb

private

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:login, :email, :password, :password_confirmation, :role_ids)
    end

User.rb

class User < ActiveRecord::Base

  #attr_accessible :login, :email, :password, :password_confirmation, :role_ids

  has_many :articles
  has_many :comments
  has_many :assignments

  has_many :roles, :through => :assignments

  def role_symbols
    roles.map do |role|
      role.name.underscore.to_sym
    end
  end


  acts_as_authentic do |c|
    c.login_field = :login
  end


  def deliver_password_reset_instructions!
    reset_perishable_token!
    Notifier.deliver_password_reset_instructions(self)
  end

end

现在,当我尝试使用下面给出的表格注册时,

enter image description here

我收到以下附加错误。请帮我解决一下。

enter image description here

2 个答案:

答案 0 :(得分:10)

来自authlogic github帐户的issue

Authlogic已将其默认加密系统从SHA512更改为SCrypt。

您的gemfile似乎需要这个

gem 'authlogic', '~> 3.4.0'
gem 'scrypt'

如果您不想要SCrypt,可以使用Sha512

acts_as_authentic do |c|
  c.crypto_provider = Authlogic::CryptoProviders::Sha512
end
您的User.rb

中的

您可能还需要指定authlogic gem的版本

gem 'authlogic', github: 'binarylogic/authlogic', ref: 'e4b2990d6282f3f7b50249b4f639631aef68b939'

但我想这很快就会修复

答案 1 :(得分:0)

问题在于Authlogic gem。要使它受到 Rails 4.0 的支持,我们需要从给定的github URL下面获取它,

gem 'authlogic', github: 'binarylogic/authlogic', ref: 'e4b2990d6282f3f7b50249b4f639631aef68b939'

然后强参数的实现也可以正常工作..