47 Stimmen

Wie kann ich :confirmable in Devise aktivieren?

In der neuesten Version von Devise ist :confirmable standardmäßig nicht aktiviert. Ich habe bereits die entsprechenden Spalten zum Benutzermodell hinzugefügt, kann aber keine Codebeispiele finden, wie man :confirmable aktiviert.

Wo kann ich ein gutes Beispiel finden oder welchen Code brauche ich, um dies zu aktivieren?

85voto

Tilo Punkte 32417

Um die Bestätigungsfunktion zu "aktivieren", müssen Sie sie nur zu Ihrem Modell hinzufügen, z. B.:

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

Danach müssen Sie eine Migration erstellen und ausführen, die die erforderlichen Spalten zu Ihrem Modell hinzufügt:

# 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

siehe: Hinzufügen eines bestätigbaren Moduls zu einer bestehenden Website mit Devise

Ich würde empfehlen, den Quellcode zu prüfen, um zu sehen, wie Confirmable funktioniert:

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

Sie können sich auch den RailsCast auf Devise ansehen:

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

Als Nächstes wäre es am besten, auf GitHub nach Beispielanwendungen zu suchen

0 Stimmen

Dies sollte als Antwort markiert werden, ebenso wie das Hinzufügen eines Teils von " stackoverflow.com/a/7577878/602588 " (Antwort unten).

2 Stimmen

Sie müssen auch die Zeile hinzufügen: add_column :users, :unconfirmed_email, :string

0 Stimmen

Ist das eine aktuelle Änderung in Devise?

19voto

Piotr Mąsior Punkte 1580

Diese Frage scheint etwas seltsam zu sein ;-) Wenn Sie eine ähnliche Migration geschrieben haben:

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

und wie Sie sagten, kleine Änderung im Modell (Übergabe zusätzlicher => :confirmable an devise) wie so:

    devise :database_authenticatable, :registerable, :confirmable

Sie können nun einige Ansichten erstellen (falls Sie dies noch nicht getan haben)

    rails generate devise:views

Sie können zu app/views/devise/confirmations/new.html.erb gehen und überprüfen, wie es aussieht oder es ändern. Außerdem können Sie app/views/devise/confirmations/shared/_links.erb inspizieren => dort ist die Zeile:

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

Diese Bedingung prüft, ob die Bestätigungsfunktion aktiviert ist... technisch gesehen, wenn alles gut lief, sollte es OOTB funktionieren. Nach dem Erstellen eines neuen Kontos - im Log - sollten Sie Zeilen sehen, in denen eine Bestätigungsmail mit dem entsprechenden Link gesendet wird. Es wird ausgelöst:

     Rendered devise/mailer/confirmation_instructions.html.erb

Sie haben also die nächste Stelle, an der Sie sie ein wenig anpassen können

Wie kann die Bestätigungsstrategie angepasst werden? Bitte fragen Sie genau, was Sie erreichen wollen. Sie können den devise gem Pfad überprüfen. In /lib/devise/models/confirmable.rb könnten einige Kommentare hilfreich sein.

Grüße

4 Stimmen

Es sollte beachtet werden, dass der Stil der Migration nach V2 nicht mehr aktuell ist. github.com/plataformatec/devise/wiki/

18voto

Jeremy Thomas Punkte 479

Wenn Sie devise bereits in Ihrer App installiert haben und "confirmable" später hinzufügen möchten, anstatt es auszuführen:

rails generate devise:views

wie von Piotr erwähnt, laufen

rails generate devise:views confirmable

um nur die für "bestätigungsfähig" benötigten Ansichten zu erzeugen. Sie werden eine Ausgabe wie diese sehen:

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 

Sie können dann direkt in Ihrem Projekt auf diese Dateien zugreifen und sie wie Ihre Anwendung gestalten. Sie können auch die Nachrichten in den E-Mails ändern, die Devise über die generierten Mailer-Ansichten versendet.

Vergessen Sie nicht, config.action_mailer.delivery_method und config.action_mailer.smtp_settings in Ihrer app/config/environments/{environment_name}.rb-Datei hinzuzufügen. So sieht meine Datei production.rb aus:

  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  }

0 Stimmen

Keine Migration durchführen müssen, wie Tilo vorschlägt?

3 Stimmen

Äh, das ist ein bisschen daneben. Alle hier erstellten Ansichten werden nicht helfen. Sie brauchen wirklich nur: create app/views/confirmable/confirmations create app/views/confirmable/confirmations/new.html.erb create app/views/confirmable/mailer/confirmation_instructions.html.‌​erb

0 Stimmen

Hallo, was ist die richtige Einstellung für :domain? ist es Domäne von meinem heroku app oder?

11voto

cintrzyk Punkte 419

Kasse Wikiseite entwerfen . Es gibt eine vollständige Antwort auf Ihre Frage.

2voto

Michael Wong Punkte 115

Für DRY, können Sie auch Mailer-Konfiguration in config/initializers/mail.rb wie setzen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X