最新版本的 Devise 默认没有启用 :confirmable。我已经将相应的列添加到 User 模型中,但找不到任何关于如何启用 :confirmable 的代码示例。
我在哪里可以找到一个很好的例子或者我需要什么代码来启用它?
最新版本的 Devise 默认没有启用 :confirmable。我已经将相应的列添加到 User 模型中,但找不到任何关于如何启用 :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
我建议检查源代码以了解 Confirmable 的工作原理:
https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb
您还可以在 Devise 上查看 RailsCast:
http://railscasts.com/episodes/209-introducing-devise
接下来最好在 GitHub 上搜索示例应用程序
这个问题似乎很奇怪;-) 如果您编写了一些类似的迁移:
change_table(:users) do |t|
t.confirmable
end
add_index :users, :confirmation_token, :unique => true
正如您所说,模型几乎没有变化(通过额外的 => :confirmable 进行设计),如下所示:
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 中,一些评论可能会有所帮助。
问候
如果您已经将设计安装到您的应用程序中,并且想稍后添加“可确认”,而不是运行:
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 通过生成的邮件程序视图发送的电子邮件中的消息。
最后,不要忘记在 app/config/environments/{environment_name}.rb 文件中添加 config.action_mailer.delivery_method 和 config.action_mailer.smtp_settings。这是我的 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 }
结帐设计 wiki 页面。你的问题有一个完整的答案。
对于 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 }
配置上述 ActionMailer 设置后,我必须在 config/environments/development.rb 文件中添加最后一个内容,以修复注册新用户后出现的错误页面:
config.action_mailer.default_url_options = { :host => 'localhost' }
有关此解决方案的更多详细信息:Heroku/devise - 缺少要链接的主机!请提供 :host 参数或设置 default_url_options[:host]