最新版本的Devise没有:默认启用确认。我已经将相应的列添加到用户模型,但找不到如何启用的任何代码示例:确认。
我在哪里可以找到一个好的示例或启用它需要什么代码?
答案 0 :(得分:72)
要“启用”可确认,您只需将其添加到您的模型中,例如:
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
请参阅: Adding confirmable module to an existing site using Devise
我建议查看源代码以了解Confirmable的工作原理:
https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb
您还可以查看设计中的RailsCast:
http://railscasts.com/episodes/209-introducing-devise
接下来,最好在GitHub上搜索示例应用程序
答案 1 :(得分:19)
这个问题似乎很奇怪;-)如果你写了一些类似的迁移:
change_table(:users) do |t|
t.confirmable
end
add_index :users, :confirmation_token, :unique => true
正如你所说的那样,模型的变化很小(通过额外的=&gt;:确认设计),如下所示:
devise :database_authenticatable, :registerable, :confirmable
你现在可以生成一些观点(如果你没有')
rails generate devise:views
您可以转到app / views / devise / confirmations / new.html.erb并查看其外观或更改方式。此外,您可以检查app / views / devise / confirmations / shared / _links.erb =&gt;有行:
<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
这个条件检查确认是否打开所以...技术上如果一切正常,它应该工作OOTB。创建新帐户后 - 在日志中 - 您应该看到通过适当的链接发送确认邮件的行。它触发了:
Rendered devise/mailer/confirmation_instructions.html.erb
所以你有下一个可以自定义的地方
如何自定义确认策略?请问您确切的问题,您想要实现什么目标。你可以检查设计宝石路径。在/lib/devise/models/confirmable.rb中,一些评论可能会有所帮助。
问候
答案 2 :(得分:16)
如果您已经在设计中安装了设备,并希望稍后添加“确认”,而不是运行:
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 }
答案 3 :(得分:8)
结帐devise wiki page。你的问题有一个完整的答案。
答案 4 :(得分:2)
对于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 }
答案 5 :(得分:0)
配置上述ActionMailer设置后,我必须对config / environments / development.rb文件进行最后一次添加,以修复在注册新用户后显示的错误页面:
config.action_mailer.default_url_options = {:host =&gt; 'localhost'}
有关此解决方案的更多详细信息:Heroku/devise - Missing host to link to! Please provide :host parameter or set default_url_options[:host]