14

これが私の状況です。私はdeviseを使用して、ユーザーが自分のサイトでアカウントを作成し、認証を管理できるようにします。登録プロセス中に、お客様がいくつかのオプションを変更できるようにします。これにより、実際には異なるアカウントが作成されますが、それでも同じコアユーザーリソースに基づいています。これらのアカウントタイプの一部については、確認メールを送信しないことを選択したいと思います。アカウントが確認されず、ユーザーがログインできないかどうかは関係ありません。それで問題ありません。どうすればそれを行うことができますか?ありがとう、アレックス

4

5 に答える 5

25

実はもう少し深く掘り下げるととても簡単です。ユーザーモデル(または使用しているもの)の1つのメソッドをオーバーライドするだけです。

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

あなたの条件と仕事が終わった!

アレックス

于 2011-01-25T08:33:58.193 に答える
18

メールの送信をスキップして確認を行わない場合は、次を使用します。

# 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
于 2015-10-06T20:04:36.130 に答える
11

新しいユーザーを作成する前に、コントローラーに次のコード行を追加することもできます。

@user.skip_confirmation!
于 2012-12-14T01:10:57.283 に答える
9

他の回答が提出された後にDeviseがこれを追加したかどうかはわかりませんが、このためのコードは次の場所にあり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
于 2011-08-23T00:32:19.043 に答える
6

私は関数で同様のことをすることができました:

Registrations_controller.rb

def build_resource(* args)
    素晴らしい
    if session [:omniauth]#TODO-セッションはあるがログインしていない場合はどうでしょうか。
      @ user.apply_omniauth(session [:omniauth])
      @ user.mark_as_confirmed#外部認証を使用している場合はアカウントを確認する必要はありません
      #@ user.valid?
    終わり
  終わり

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

user.rb

  def mark_as_confirmed
    self.confirmation_token = nil
    self.confirmed_at = Time.now
  終わり
于 2011-04-28T00:34:48.507 に答える