web-dev-qa-db-fra.com

Comment puis-je activer: confirmable dans Devise?

La dernière version de Devise n'a pas: confirmable activé par défaut. J'ai déjà ajouté les colonnes respectives au modèle utilisateur mais je ne trouve aucun exemple de code indiquant comment activer: confirmable.

Où puis-je trouver un bon exemple ou de quel code ai-je besoin pour l'activer?

41
Evan Machnic

pour "activer" confirmable, il vous suffit de l'ajouter à votre modèle, par exemple:

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

après cela, vous devrez créer et exécuter une migration qui ajoute les colonnes requises à votre modèle:

# 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

voir: Ajouter un module confirmable à un site existant en utilisant Devise

Je recommanderais de vérifier le code source pour voir comment fonctionne Confirmable:

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

Vous pouvez également consulter le RailsCast sur Devise:

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

Ensuite, il serait préférable de rechercher des exemples d’applications sur GitHub.

72
Tilo

Cette question semble être étrange ;-) Si vous avez écrit une certaine migration:

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

et comme vous l'avez dit, peu de changement de modèle (passage supplémentaire =>: confirmable à concevoir) comme ceci:

    devise :database_authenticatable, :registerable, :confirmable

vous pouvez maintenant générer des vues (si vous ne l'avez pas fait)

    Rails generate devise:views

Vous pouvez aller à app/views/inventer/confirmations/new.html.erb et vérifier son apparence ou le modifier. De plus, vous pouvez inspecter app/views/inventer/confirmations/shared/_links.erb => il y a une ligne:

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

Cette condition vérifie si confirmable est activée, donc ... techniquement, si tout s'est bien passé, il devrait fonctionner correctement. Après avoir créé un nouveau compte - dans le journal - vous devriez voir les lignes où le courrier de confirmation est envoyé avec le lien approprié. Cela déclenche:

     Rendered devise/mailer/confirmation_instructions.html.erb

de sorte que vous avez prochain endroit où vous pouvez le personnaliser un peu

Comment personnaliser la stratégie de confirmation? S'il vous plaît demander à la question exacte ce que vous voulez atteindre. Vous pouvez vérifier le chemin d'accès aux pierres précieuses. Dans /lib/devise/models/confirmable.rb, certains commentaires pourraient être utiles. 

cordialement

19
Piotr Mąsior

Si vous avez déjà installé conce dans votre application et souhaitez ajouter "confirmable" ultérieurement, au lieu de lancer:

Rails generate devise:views

comme mentionné par Piotr, exécutez

Rails generate devise:views confirmable

pour ne produire que les vues nécessaires pour "confirmable". Vous verrez la sortie comme ceci:

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 

Vous pourrez alors accéder à ces fichiers directement dans votre projet pour les styler comme votre application. Vous pourrez également modifier la messagerie dans les courriels que Devise envoie par le biais des vues générées. 

Enfin, n'oubliez pas d'ajouter config.action_mailer.delivery_method et config.action_mailer.smtp_settings dans votre fichier app/config/environnements/{nom_environnement} .rb. Voici à quoi ressemble mon fichier 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

Commander Concevoir la page wiki . Il y a une réponse complète à votre question. 

8
cintrzyk

Pour DRY, vous pouvez aussi mettre mailer config dans config/initializers/mail.rb comme ceci:

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

Après avoir configuré le paramètre ActionMailer décrit ci-dessus, j'ai dû faire un dernier ajout au fichier config/environment/development.rb pour corriger une page d'erreur qui s'afficherait après l'enregistrement d'un nouvel utilisateur: 

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

Plus de détails sur cette solution: Heroku/devise - Hôte manquant vers lequel se connecter! Veuillez indiquer: Paramètre d'hôte ou définissez default_url_options [: Host]

0
Moon Man