2011-01-25 5 views
12

私の状況では、ユーザーが自分のサイト にアカウントを作成し、その認証を管理できるようにするために工夫しています。 登録処理中に、 のオプションを変更することができますが、実際には別のアカウントが作成されますが、同じコアユーザーリソースに基づいています( )。 アカウントの種類の確認メールを送信しないことを選択します。私はアカウントが確認されない場合は気にしない ユーザーはログインできません、それは大丈夫です。 どうすればいいですか? ありがとう、 アレックスDevise:特定のケースで確認メールを送信しないことは可能ですか? (確認可能な場合でも有効です)

答えて

20

もう少し深く掘り下げれば実際はかなり簡単です。 ちょうどあなたのユーザーモデル(または使用しているものは何でも)で1つのメソッドをオーバーライド:

# Callback to overwrite if confirmation is required or not. 
    def confirmation_required? 
     !confirmed? 
    end 

はあなたの条件とジョブの完了を入れて!

アレックス

+0

メールがresend_confirmationまたはsend_reconfirmationに送信されることはありません、便利... –

+0

うわーです。..超クールな男! – knagode

5

私は機能と似たような行うことができました:

registrations_controller.rbを

 
def build_resource(*args) 
    super 
    if session[:omniauth] # TODO -- what about the case where they have a session, but are not logged in? 
     @user.apply_omniauth(session[:omniauth]) 
     @user.mark_as_confirmed # we don't need to confirm the account if they are using external authentication 
     # @user.valid? 
    end 
    end 

そして、私のユーザモデルで:

user.rb

 
    def mark_as_confirmed 
    self.confirmation_token = nil 
    self.confirmed_at = Time.now 
    end 
8

工夫が他の回答が提出された後にこれを追加した場合、私は知らないが、このためのコードはconfirmable.rbに権利がある:

# If you don't want confirmation to be sent on create, neither a code 
    # to be generated, call skip_confirmation! 
    def skip_confirmation! 
    self.confirmed_at = Time.now 
    end 
+1

ユーザを保存する前にこれを呼び出す必要があります。そうしないと、 'Confirmation instructions'メールが送信されます。 – dukedave

+2

同様の 'skip_reconfirmation!'メソッドもあります –

10

あなたは、単に前に、コントローラに次のコード行を追加することができます新規ユーザの作成:あなただけの電子メールを送信スキップしたいが、確認を行っていない場合は、

@user.skip_confirmation! 
+0

'create'アクションをオーバーロードし、カスタマイズのために' super do | user | 'を使用している場合、スキップするのは遅すぎます。これは例えば 'build_resource'に入れなければなりません。 –

11

は使用:

# Skips sending the confirmation/reconfirmation notification email after_create/after_update. Unlike 
# #skip_confirmation!, record still requires confirmation. 
@user.skip_confirmation_notification! 

あなたは、このメソッドを上書きするコールバックであなたのモデルでこれを呼び出すにしたくない場合は、次の

def send_confirmation_notification? 
    false 
end 
関連する問題