1

Railsアプリ(DBとしてMongoid経由でMongoDBを使用している)で認証を処理するためにSorcery Gemを使用しており、ユーザーモデルは次のようになります。

class User
  include Mongoid::Document
    attr_accessible :username, :email, :password, :password_confirmation
    authenticates_with_sorcery!

    field :username, :type => String
    field :email, :type => String
    field :username, :type => String
    
    field :password, :type => String
    field :password_confirmation, :type => String

  validates_confirmation_of :password
  validates_presence_of :password, :on => :create
  validates_presence_of :username
  validates_uniqueness_of :username
  validates_presence_of :email
  validates_uniqueness_of :email

end

「新規ユーザービュー」(これ)を使用して新しいユーザーを作成します。

<%= form_for @user do |f| %>
  <% if @user.errors.any? %>
    <div class="error_messages">
      <h2>Form is invalid</h2>
      <ul>
        <% for message in @user.errors.full_messages %>
          <li><%= message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>
  <div class="field">
    <%= f.label :username %>
    <%= f.text_field :username %>
  </div>
  <div class="field">
    <%= f.label :email %>
    <%= f.text_field :email %>
  </div>
  <div class="field">
    <%= f.label :password %>
    <%= f.password_field :password %>
  </div>
  <div class="field">
    <%= f.label :password_confirmation %>
    <%= f.password_field :password_confirmation %>
  </div>
  <div class="actions"><%= f.submit %></div>
<% end %>

データベースに次のようなレコードが作成されます。

1.9.3-p286 :002 > u = User.first
 => #<User _id: 507e6dd961ef51512d000004, _type: nil, username: "Jmlevick", email: "Jmlevick@Jmlevick.com", crypted_password: "$2a$10$yoRzXIu0a2uRRuu9z5MbD.TQQ2upawMC0DGuC/njlQjqzHwdhVWTm", salt: "xwCVQuCNWb9o3fKgvffa", remember_me_token: nil, remember_me_token_expires_at: nil, reset_password_token: nil, reset_password_token_expires_at: nil, reset_password_email_sent_at: nil, password: nil, password_confirmation: "MySecretPassword"> 

したがって、保存されたユーザーとクレデンシャルでアクセスできますが、レコードには2つの奇妙なことがあります。1)パスワードが「nil」に設定されている(ただし、データベースは実際のパスワードと暗号を保存します)それで、私はそれで大丈夫です)そして:password_confirmationフィールドはパスワードを明らかにします(これはセキュリティのために暗号化されなければなりません)!

なぜこうなった?どうすれば解決できますか?パスワード確認欄が必要です!

4

1 に答える 1

1

password_confirmationクラスにフィールドを含めないだけでよいと思いますUser.Mongoidはpassword_confirmation、セットを持っているためフィールドを探す必要validate_confirmation_of :passwordがあるため、明示的に設定する必要はないと思います.

于 2012-10-17T09:01:26.957 に答える