Подтвердить что ты не робот

Как включить: подтвердить в "Разработка"?

В новейшей версии Devise нет: подтверждение по умолчанию включено. Я уже добавил соответствующие столбцы в модель User, но не могу найти примеры кода, как включить: confirmable.

Где я могу найти хороший пример или какой код мне нужно включить?

4b9b3361

Ответ 1

для "enable" confirmable, вам просто нужно добавить его в свою модель, например:

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

Вы также можете проверить RailsCast на Devise:

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

Далее было бы лучше искать примеры приложений на GitHub

Ответ 2

Этот вопрос кажется нечетным;-) Если вы написали некоторую миграцию:

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

и, как вы сказали, небольшое изменение в модели (прохождение дополнительного = > : подтверждаемое для разработки):

    devise :database_authenticatable, :registerable, :confirmable

теперь вы можете сгенерировать несколько представлений (если вы этого не сделали)

    rails generate devise:views

Вы можете перейти в приложение /views/devise/confirmations/new.html.erb и посмотреть, как он выглядит или изменить его. Кроме того, вы можете проверить приложение /views/devise/confirmations/shared/ _links.erb = > есть строка:

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

Это условие проверяет, включено ли подтверждение, поэтому... технически, если все прошло нормально, он должен работать OOTB. После создания новой учетной записи - в журнале - вы должны увидеть строки, на которые отправляется письмо с соответствующей ссылкой. Он вызывает:

     Rendered devise/mailer/confirmation_instructions.html.erb

поэтому у вас есть следующее место, где вы можете немного настроить его

Как настроить стратегию подтверждения? Пожалуйста, задайте точный вопрос, чего вы хотите достичь. Вы можете проверить путь создания драгоценных камней. В /lib/devise/models/confirmable.rb некоторые комментарии могут быть полезны.

рассматривает

Ответ 3

Если вы уже установили приложение в свое приложение и хотите добавить "подтверждать" позже, вместо запуска:

rails generate devise:views

как упоминал Петр, запустите

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/environment/{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  }

Ответ 5

Для DRY вы также можете установить конфигурацию mailer в 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  }

Ответ 6

После настройки вышеописанного ActionMailer мне пришлось сделать последнее дополнение к файлу config/environment/development.rb, чтобы исправить страницу с ошибкой, которая появится после регистрации нового пользователя:

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

Подробнее об этом решении: Heroku/devise - Отсутствует хост для ссылки! Укажите параметр хоста или установите default_url_options [: хост]