web-dev-qa-db-ja.com

Deviseで:confirmableを有効にするにはどうすればよいですか?

Deviseの最新バージョンでは、デフォルトで:confirmableが有効になっていません。それぞれの列をユーザーモデルに既に追加しましたが、:confirmableを有効にする方法のコード例が見つかりません。

良い例はどこにありますか?それを有効にするためにどんなコードが必要ですか?

41
Evan Machnic

確認可能を「有効化」するには、それをモデルに追加するだけです。例:

class User
  # ...
  devise :confirmable , ....
  # ...
end

その後、必要な列をモデルに追加する移行を作成して実行する必要があります。

# Rails g migration add_confirmable_to_devise
class AddConfirmableToDevise < ActiveRecord::Migration
  def self.up
    add_column :users, :confirmation_token, :string
    add_column :users, :confirmed_at,       :datetime
    add_column :users, :confirmation_sent_at , :datetime
    add_column :users, :unconfirmed_email, :string

    add_index  :users, :confirmation_token, :unique => true
  end
  def self.down
    remove_index  :users, :confirmation_token

    remove_column :users, :unconfirmed_email
    remove_column :users, :confirmation_sent_at
    remove_column :users, :confirmed_at
    remove_column :users, :confirmation_token
  end
end

参照: Deviseを使用して既存のサイトに確認可能なモジュールを追加する

ソースコードを確認して、Confirmableの動作を確認することをお勧めします。

https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb

DeviseでRailsCastを確認することもできます。

http://railscasts.com/episodes/209-introducing-devise

次に、GitHubでサンプルアプリケーションを検索するのが最適です。

72
Tilo

この質問は奇妙なもののようです;-)同様にいくつかの移行を記述した場合:

    change_table(:users) do |t|
      t.confirmable
    end
    add_index :users, :confirmation_token,   :unique => true

そして、あなたがモデルの小さな変更を言ったように(追加の=>:考案するための確認可能を渡す)のように:

    devise :database_authenticatable, :registerable, :confirmable

いくつかのビューを生成できるようになりました(作成した場合)

    Rails generate devise:views

App/views/devise/confirmations/new.html.erbに移動して、外観や変更を確認できます。さらにapp/views/devise/confirmations/shared/_links.erb =>を検査できます:

    <%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>

この条件は確認可能がオンになっているかどうかをチェックします...技術的にすべてがうまくいった場合、OOTBで動作するはずです。新しいアカウントを作成すると、ログに、適切なリンクを含む確認メールが送信される行が表示されます。トリガー:

     Rendered devise/mailer/confirmation_instructions.html.erb

それで、あなたはそれを少しカスタマイズできる次の場所を得ました

確認戦略をカスタマイズするには?何を達成したいのか正確に質問してください。考案のgemパスを確認できます。 /lib/devise/models/confirmable.rbで、いくつかのコメントが役立ちます。

よろしく

19
Piotr Mąsior

アプリに既にdeviseをインストールしていて、実行する代わりに後で「確認可能」を追加したい場合:

Rails generate devise:views

piotrが述べたように、

Rails generate devise:views confirmable

「確認可能」に必要なビューのみを生成する。次のような出力が表示されます。

Rails generate devise:views confirmable
    invoke  Devise::Generators::SharedViewsGenerator
    create    app/views/confirmable/mailer
    create    app/views/confirmable/mailer/confirmation_instructions.html.erb
    create    app/views/confirmable/mailer/reset_password_instructions.html.erb
    create    app/views/confirmable/mailer/unlock_instructions.html.erb
    create    app/views/confirmable/shared
    create    app/views/confirmable/shared/_links.erb
    invoke  form_for
    create    app/views/confirmable/confirmations
    create    app/views/confirmable/confirmations/new.html.erb
    create    app/views/confirmable/passwords
    create    app/views/confirmable/passwords/edit.html.erb
    create    app/views/confirmable/passwords/new.html.erb
    create    app/views/confirmable/registrations
    create    app/views/confirmable/registrations/edit.html.erb
    create    app/views/confirmable/registrations/new.html.erb
    create    app/views/confirmable/sessions
    create    app/views/confirmable/sessions/new.html.erb
    create    app/views/confirmable/unlocks
    create    app/views/confirmable/unlocks/new.html.erb 

その後、プロジェクト内でこれらのファイルに直接アクセスして、アプリケーションのようにスタイルを設定できます。また、生成されたメーラービューを通じてDeviseが送信する電子メールのメッセージを変更することもできます。

最後に、config.action_mailer.delivery_methodとconfig.action_mailer.smtp_settingsをapp/config/environments/{environment_name} .rbファイルに追加することを忘れないでください。これは私のproduction.rbファイルがどのように見えるかです:

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address              => "smtp.gmail.com",
    :port                 => 587,
    :domain               => '[redacted]',
    :user_name            => '[redacted]',
    :password             => '[redacted]',
    :authentication       => 'plain',
    :enable_starttls_auto => true  }
16
Jeremy Thomas

チェックアウト デバイスのwikiページ 。あなたの質問には完全な答えがあります。

8
cintrzyk

DRYの場合、次のようにconfig/initializers/mail.rbにメーラー設定を配置することもできます。

ActionMailer::Base.smtp_settings = {
    :address              => "smtp.gmail.com",
    :port                 => 587,
    :domain               => '[redacted]',
    :user_name            => '[redacted]',
    :password             => '[redacted]',
    :authentication       => 'plain',
    :enable_starttls_auto => true  }
2
Michael Wong

上記のActionMailer設定を構成した後、config/environments/development.rbファイルに最後に1つ追加して、新しいユーザーの登録後に表示されるエラーページを修正する必要がありました。

config.action_mailer.default_url_options = {:Host => 'localhost'}

このソリューションの詳細: Heroku/devise-リンクするホストがありません!:Hostパラメーターを指定するか、default_url_options [:Host]を設定してください

0
Moon Man