1

サインアップ プロセスに Devise gem を使用しています。必要なのはメールだけなので、すべてのユーザーのパスワードを自動生成しています。

何らかの理由で、私のコードは 1 人のユーザーに対して 2 つのデータベース エントリを作成しています。1 つ -- 電子メール アドレス。1 つ -- 暗号化されたパスワードのみ。

ユーザー.rb

password = Devise.friendly_token
  User.create!(:email => @current_user_email, :id => @current_user_id, :password => password, :password_confirmation => password)


  before_save { |user| user.email = email.downcase }

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
4

1 に答える 1

2

私のプロジェクトの 1 つで、ユーザーにパスワードの登録を要求しないという同様の道をたどりました。それは、いくつかの大きな頭痛の種とUXシェナニガンFWIWをもたらしました.

永続化のために使用するものは何でも、必ずメール列に一意のインデックスを設定してください。これにより例外が発生しますが、簡単に処理できます。

次のようなユーザー モデルのクラス メソッドをお勧めします。

class User
  def self.create_without_password!(email)
    password = Devise.friendly_token
    User.create!(:email => email.downcase, :password => password, :password_confirmation => password)
  end
end

before_save コールバックを使用せずにモデルを検証し、一意でない場合に例外を発生させる必要があります

于 2012-09-11T19:45:23.920 に答える