2011-09-19 4 views
54

私はFacebookと一緒にdeviseを統合しました。ユーザーは、彼/彼女のFacebookのアカウントでログインした後に今、私はアカウントが確認されているにもかかわらず Devise - 電子メールを送信せずに確認済みのユーザーアカウントを作成しますか?

user = User.create(:email => data["email"], 
        :password => Devise.friendly_token[0,20]) 
    user.confirmed_at = DateTime.now 
    user.save! 

は、確認メールがまだ発射され、ユーザーアカウントを作成するとき。どのように私は電子メールを発射することができます任意のアイデア?

+1

ユーザクラスで考案するために渡されたモジュールのリストの ':confirm'を取るか?あなたは実際にそれを使用していないので。 – numbers1311407

+1

他にも私のサイトに登録している他のユーザーは、電子メールで確認する必要があります。 – disappearedng

+5

@disappeardngが例外を求めていると思います。 – user482594

答えて

125

確認コールバックは作成後に発生するため、手動でconfirmed_atを設定する前に、例の行1で発生しています。

コメントによれば、最も適切なことは、この目的のために提供されたメソッド#skip_confirmation!を使用することです。 confirmed_atを手動で設定することはできますが、可能な限り避けるべきである提供されたAPIを回避します。

user = User.new(user_attrs) 
user.skip_confirmation! 
user.save! 

オリジナルの答え:あなたはcreate引数と一緒にconfirmed_atを渡すと

、メールがかどうかのテストとして、送るべきではありませんので、何か

アカウントがすでに「確認済み」でない場合は、その日付が設定されているかどうかを調べることです。ユーザーレコードを構築するためにnewの代わりcreateを使用し、あるいは単に

User.create(
    :email => data['email'], 
    :password => Devise.friendly_token[0,20], 
    :confirmed_at => DateTime.now 
) 

+0

fyi confirm_atをattr_accessibleとして宣言しなければなりませんでした(潜在的なセキュリティ違反であれば、それは駄目です)。これ以外は、この作品! – disappearedng

+8

User.newとuser.skip_confirmationを使用してください! confirmed_atにアクセス可能にする必要がないようにします。 – waldo

+0

saveを呼び出すと電子メールが送信されるので、newを使用すると機能しません! @ waldoのskip_confirmationに関する提案は、 – Khash

9

あなただけの電子メールを送信するようにしたい場合は、あなたが#skip_confirmation_notificationを使用することができ、そのよう:

user = User.new(your, args) 
user.skip_confirmation_notification! 
user.save! 

確認/再確認通知メール after_create/after_updateを送るdocumentation

スキップを参照してください。 #skip_confirmation!とは異なり、まだレコード には確認が必要です。

+0

これは私のために働いた!トップの答えはありませんでした。 :(ありがとう!:) –

関連する問題