web-dev-qa-db-ja.com

工夫-メールを送信せずに確認済みのユーザーアカウントを作成しますか?

私はdeviseとfacebookを統合しました。ユーザーがFacebookアカウントでログインした後にユーザーアカウントを作成すると、

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

アカウントが確認された場合でも、確認メールが送信されます。メールの送信をオフにする方法はありますか?

58
disappearedng

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

コメントによると、最も正しいことは、この目的のために提供されているメソッド #skip_confirmation! を使用することです。 confirmed_atを手動で設定しても機能しますが、提供されているAPIを回避します。これは可能な場合は避ける必要があります。

だから、次のようなもの:

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

元の回答:

confirmed_atcreate引数とともに渡す場合、アカウントが既に「確認」されているかどうかのテストはその日付かどうかを確認するため、メールは送信されません。設定されています。

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

または、newの代わりにcreateを使用して、ユーザーレコードを作成します。

136
numbers1311407

メールを送信したくない場合は、#skip_confirmation_notification、 そのようです:

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

ドキュメント を参照してください

After_create/after_updateの確認/再確認通知メールの送信をスキップします。 #skip_confirmation!とは異なり、記録にはまだ確認が必要です。

11