web-dev-qa-db-ja.com

手動で作成したユーザーに対して、Deviseの確認メールを遅らせたり再送信したりします

私はDeviseを使用して、ユーザーのサインアップも許可しています。また、自分のユーザー管理者を使用してユーザーを手動で作成しています。管理者でユーザーを作成すると、Deviseはすぐに新しいユーザーに確認を送信します。これは、デバイスと管理者の両方が同じモデルを使用しているためだと思います。管理者が送信する準備ができるまで、この電子メールを遅らせるにはどうすればよいですか?

さらに、Deviseの検証では、管理者が新しいユーザーのパスワードを設定する必要があります。手動で作成したユーザーが確認に応答するときに、自分のパスワードを指定することを強くお勧めします。現在、手動で作成されたユーザーは、補足の電子メールでパスワードを送信しない限り、パスワードを知りません。

28
Tim Santeford

これは、アプリの1つで行います。次のように、確認を自動的に配信しないようにDeviseに指示できます。

@user.skip_confirmation!

そして後で、あなたはすることができます

Devise::Mailer.confirmation_instructions(@user).deliver

Rails 2.xの場合、次のようにします。

DeviseMailer.deliver_confirmation_instructions(@user)
37
BoosterStage

@ user.skip_confirmation!ユーザーを確認するため、ユーザーは確認を使用せずにログインできます。

これは、デバイス3.5で機能します

ユーザーの作成中に確認メールを送信するように工夫するのをやめてください。

@user.skip_confirmation_notification! 

後で確認手順を送信する

@user.send_confirmation_instructions
49
Jashwant

解決策は@RyanHeneiseの答えほど単純ではありません。もしあなたがそうするなら @user.skip_confirmation!ユーザーを確認するので、ユーザーは確認を使用せずにログインできるため、この場合の確認文字は役に立ちません。このソリューションでは、ユーザーが確認なしでログインすることはできません: 認証用のDeviseを使用したRails 3-手動でユーザーを作成するにはどうすればよいですか?

11
dombesz

より簡単な方法があります(v2.2.4で追加されました)

Deviseの確認可能なモジュールに、完全なskip_confirmation_notificationが含まれるようになりました。よりクリーンなソリューションを可能にする方法:

@user = User.new params[:user]
@user.skip_confirmation_notification! 
@user.save

# ... do stuff, then later...

Devise::Mailer.confirmation_instructions(@user).deliver 
10
amlutz160

私はこれを調べるのに少し時間を費やしました、基本的にあなたはこれを追加してセットアップする必要があります delayed_job

def send_confirmation_instructions
  generate_confirmation_token! if self.confirmation_token.nil?
  ::Devise.mailer.delay.confirmation_instructions(self)
end

これを保護されたメソッドとしてユーザーモデルに追加し、 確認可能 のデバイスをオーバーライドします。また、gemが更新され、新しいメソッドが追加されたことに注意してください 確認命令を送信するcreateでオーバーライドされます

1
Matt Smith
0
John Bachir