3

ユーザーのモデリング、サインイン、およびサインアップについて、Michael Hartl による RoR チュートリアルに従いました。現在、ログイン時に送信された電子メールが実際の電子メールであり、検証時に使用した正規表現と一致するランダムな文字列ではないことを確認する必要がある立場にあります。

私はDeviseがそれを処理することを知っています。そして、私が持っている作業コードを変更したくありません。Devise のメール認証機能のみを使用するにはどうすればよいですか? (サインイン、セッション、認証などを実行したくない)

このようにDeviseを使用することができない場合、DeviseをRailsユーザーモデルにプラグインすることはどれほど壊滅的でしょうか?

ありがとう !

4

2 に答える 2

3

Devise は正規表現を使用してメールを検証します (正規表現を使用してこれを行うことは非常に論理的です)。

デバイスが使用する正規表現は次のとおりです: (デバイスコードからコピー)

  # Email regex used to validate email formats. It simply asserts that
  # an one (and only one) @ exists in the given string. This is mainly
  # to give user feedback and not to assert the e-mail validity.
  mattr_accessor :email_regexp
  @@email_regexp = /\A[^@]+@([^@\.]+\.)+[^@\.]+\z/

デバイスを使用している場合は、デバイス初期化子でこの正規表現を変更できます。

工夫が必要ない場合は、自分でメール検証を実装できます。

非常に良いサンプルが、公式の Rails ガイドのActive Record Validations ドキュメントにあります。

class EmailValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
      record.errors[attribute] << (options[:message] || "is not an email")
    end
  end
end
于 2012-07-05T06:43:27.483 に答える
1

あなたが必要とするのは、確認可能な工夫です。(確認リンクが記載されたメールが送信されます。)

この Railscast が役立ちます: http://railscasts.com/episodes/209-introducing-devise

有効にするには、このガイドまたはこの質問を確認してください。

于 2013-07-08T16:15:58.150 に答える