0

Ruby on Rails 4.0 で独自のユーザー モデルと認証を学習して使用しようとしていますが、ほとんどのチュートリアル (すべてではないにしても) は、この最近の更新で時代遅れになっているようです。それらのいずれについても説明されている方法は機能しません。私はまったく無知です、これは私のユーザーモデルです:

class User
  include Mongoid::Document
  field :login, type: String
  field :hash, type: String
  field :salt, type: String
  field :email, type: String
  field :name, type: String

  before_save :hash_password

  validate :login, presence: true, uniqueness: true, length: { in: 4..24 }
  validate :password, presence: true, confirmation: true, length: { in: 8..32 }
  validate :email, presence: true
  validate :name, presence: true

  def hash_password
    if password.present?
      self.salt = BCrypt::Engine.generate_salt
      self.hash = BCrypt::Engine.hash_secret(password, salt)
    end
  end
end

そしてコントローラー:

class UsersController < ApplicationController
  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to @user
    else
      render 'new'
    end
  end

  def new
    @user = User.new
  end

  private
    def user_params
      params.require(:user).permit(:login, :password, :password_confirmation, :email, :name)
    end
end

ユーザーを保存するUnknownAttributeとエラーが発生します。私は何が欠けていますか?どのフィールドが間違っていますか?

4

3 に答える 3

1

私はそれを機能させることができました。「不明な属性」エラーで何が問題なのかわかりませんでしたが、メソッドを使用するようにモデルを変更しました。これにより、パラメーターと bcrypthas_secure_passwordが自動的に取得され、フィールドに保存されます。:password:password_confirmed:password_digest

class User
  include Mongoid::Document
  include ActiveModel::SecurePassword # important, imports has_secure_password
  field :login, type: String
  field :password_digest, type: String
  has_secure_password
  field :email, type: String
  field :name, type: String

  validate :login, presence: true, uniqueness: true, length: { in: 4..24 }
  validate :password, presence: true, confirmation: true, length: { in: 8..32 }
  validate :email, presence: true, uniqueness: true
  validate :name, presence: true
end

これが完了したら、次のエラーが発生しました。

can't activate bcrypt-ruby (~> 3.0.0), already activated bcrypt-ruby-3.1.2. Make sure all dependencies are added to Gemfile.

bcrypt が私の Gemfile に正しく追加されたにもかかわらず、どうやらhas_secure_passwordバージョン 3.0.x の gem が必要なようです。

gem 'bcrypt-ruby', '~> 3.0.0'

これにより、期待どおりに機能するバージョン 3.0.1 (3.0.0 ではない) がダウンロードされました。このバージョンの非互換性がすぐに修正されることを願っています。

すべての答えをありがとう。このプロジェクトは、完成したらオープンソースで利用できるようになります:)

于 2013-11-05T02:57:58.303 に答える
1

レールキャストのエピソードをたどることができます。少し古いことは知っていますが、数か月前にも使用しました.Rails 4ではattr_accessibleをサポートしていないため、「attr_accessible」を使用するのではなく、単に属性を「許可」することができます。

于 2013-11-04T06:41:03.990 に答える