2011-07-17 10 views
0

認証が必要なアプリケーションでOmniAuthを使用しています。OmniAuthトリガによる検証

  1. は、私は検証を持っているオプション1について
  2. TwitterでOmniAuth

経由OmniAuthを経由して自分のサイト

  • Facebookのアカウントを作成します。

    は私が認証するユーザーのための3つの方法があります形式:

    validates_presence_of  :email, :role 
        validates_presence_of  :password,     :if => :password_required 
        validates_presence_of  :password_confirmation,  :if => :password_required 
        validates_length_of  :password, :within => 4..40, :if => :password_required 
        validates_confirmation_of :password,     :if => :password_required 
        validates_length_of  :email, :within => 3..100 
        validates_uniqueness_of :email, :case_sensitive => false 
        validates_format_of  :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i 
        validates_format_of  :role,  :with => /[A-Za-z]/ 
    

    問題は、初めてアカウントを作成したときにユーザーがtwitter/facebook経由でログインできるようにすると、検証が実行されて失敗するということです。例えば

    のActiveRecord :: RecordInvalid - 検証に失敗しました:パスワードは空白にすることはできません、パスワードが短すぎる(最小値は4つの文字である)、パスワードの確認は空白にすることはできません。

    OmniAuthで作成したアカウントはパスワードを送信しませんが、私のモデルでこれを認識し、特定の検証をスキップする方法を正確にはわかりません。

    それはあらゆる使用のなら、フルaccount.rbモデルはここにある:http://pastie.org/private/wzpftprrzfg42uifetfhpa

    どうもありがとう!

  • +0

    私はその周りに道を見つけたが、私はそれがハックだと思う。私はこの方法に加えて(上記の私のペストリーに示されているように)。 http://pastie.org/2229023 –

    答えて

    1

    ここからencrypt_password方法に条件を抽出しようとすると、この行が間違っているようだ:

    # Callbacks 
        before_save :encrypt_password, :if => :password_required 
    

    あなたはまた、コピー&ペーストをすることができますスタックトレースしてください?

    関連する問題