Cum pot activa :confirmable în Devise? (Programare, Ruby On Rails 3, Devise, Confirmare)

Evan Machnic a intrebat.

Cea mai nouă versiune a Devise nu are :confirmable activat în mod implicit. Am adăugat deja coloanele respective la modelul User, dar nu găsesc niciun exemplu de cod despre cum să activez :confirmable.

Unde pot găsi un exemplu bun sau de ce cod am nevoie pentru a-l activa?

6 răspunsuri
Tilo

pentru a „activa” confirmable, trebuie doar să o adăugați la modelul dvs:

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

după aceea, va trebui să creezi și să execuți o migrare care să adauge coloanele necesare în modelul tău:

# 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

vezi: Adăugarea modulului confirmable la un site existent folosind Devise

V-aș recomanda să verificați codul sursă pentru a vedea cum funcționează Confirmable:

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

De asemenea, ați putea verifica RailsCast despre Devise:

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

În continuare, cel mai bine ar fi să căutați aplicații de exemplu pe GitHub

Comentarii

  • Acest lucru ar trebui marcat ca răspuns, precum și adăugarea unei părți din „stackoverflow.com/a/757787878/602588” (răspunsul de mai jos). –  > Por jackyalcine.
  • De asemenea, va trebui să adăugați linia: add_column :users, :unconfirmed_email, :string –  > Por Calciphus.
  • este aceasta o modificare recentă în Devise? –  > Por Tilo.
  • Vă mulțumim pentru asta! M-a ajutat să o activez în aplicația mea în aproximativ 2 minute. Un sfat: dacă îl activați după ce aveți deja utilizatori înregistrați, probabil că confirmarea nu va funcționa pentru aceștia (nu a funcționat pentru mine). Am recreat utilizatorul, am confirmat contul și totul a funcționat perfect. –  > Por Kyle Carlson.
  • Verificați și acest lucru: Cum se face: Adăugați :confirmable la utilizatori –  > Por Alexander.
Piotr Mąsior

Această întrebare pare a fi una ciudată 😉 Dacă ați scris niște migrații asemănătoare:

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

și așa cum ați spus puțină schimbare în model (trecerea suplimentară => :confirmable to devise) așa:

    devise :database_authenticatable, :registerable, :confirmable

puteți genera acum niște vizualizări (dacă ați făcut-o’)

    rails generate devise:views

Poți merge la app/views/devise/confirmations/new.html.erb și să verifici cum arată sau să o modifici. În plus, puteți inspecta app/views/devise/confirmations/shared/_links.erb => acolo este linia:

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

Această condiție verifică dacă confirmarea este activată, deci… tehnic, dacă totul a mers bine, ar trebui să funcționeze OOTB. După crearea unui cont nou – în jurnal – ar trebui să vedeți liniile în care este trimis un e-mail de confirmare cu linkul corespunzător. Se declanșează:

     Rendered devise/mailer/confirmation_instructions.html.erb

așa că aveți următorul loc unde puteți personaliza un pic.

Cum să personalizați strategia de confirmare? Vă rugăm să puneți întrebarea exactă ce doriți să obțineți. Puteți verifica devise gem path. În /lib/devise/models/confirmable.rb ar putea fi utile unele comentarii.

Salutări

Comentarii

Jeremy Thomas

Dacă ați instalat deja devise în aplicația dvs. și doriți să adăugați „confirmable” mai târziu, în loc să rulați:

rails generate devise:views

așa cum a menționat Piotr, rulați

rails generate devise:views confirmable

pentru a produce doar vizualizările necesare pentru „confirmable”. Veți vedea o ieșire ca aceasta:

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 

Veți putea apoi să accesați aceste fișiere direct în proiectul dvs. pentru a le stiliza ca aplicația dvs. Veți putea, de asemenea, să modificați mesajele din e-mailurile pe care Devise le trimite prin intermediul vizualizărilor generate de mailer.

În cele din urmă, nu uitați să adăugați config.action_mailer.delivery_method și config.action_mailer.smtp_settings în fișierul app/config/environments/{environment_name}.rb. Iată cum arată fișierul meu 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  }

Comentarii

  • nu trebuie să faceți o migrare așa cum sugerează Tilo? –  > Por Leahcim.
  • Er, acest lucru este un pic în afara. Toate vizualizările create aici nu vă vor ajuta. Aveți nevoie doar de: create app/views/confirmable/confirmations create app/views/confirmable/confirmations/new.html.erb create app/views/confirmable/mailer/confirmation_instructions.html.erb –  > Por jackyalcine.
  • Bună, care este setarea corectă pentru :domain? este domeniul aplicației mele heroku sau? –  > Por Skodik.o.
cintrzyk

Checkout devise wiki page. Există un răspuns complet la întrebarea dumneavoastră.

Michael Wong

Pentru DRY, puteți, de asemenea, să puneți configurația mailerului în config/initializers/mail.rb ca:

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

Moon Man

După ce am configurat setarea ActionMailer descrisă mai sus, a trebuit să fac o ultimă adăugare la fișierul config/environments/development.rb pentru a rezolva o pagină de eroare care apărea după înregistrarea unui nou utilizator:

config.action_mailer.default_url_options = { :host => ‘localhost’ }

Mai multe detalii despre această soluție: Heroku/devise – Lipsește gazda la care să se facă legătura! Vă rugăm să furnizați parametrul :host sau să setați default_url_options[:host]