# in views/device/registration/new.html.erb:
<% password = Devise.friendly_token.first(8) %>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name, :locale => I18n.locale)) do |f| %>
<%= f.hidden_field :password, :value => password %>
<%= f.hidden_field :password_confirmation, :value => password %>
<%= f.email_field :email %>
<%= f.submit "sign up" %>
<% end %>
# in views/device/mailer/confirmation_instructions.html.erb:
<p>Your Password: <%# @ressource.password %></p>
我正在为新用户生成密码。用户收到确认电子邮件,这应该是放置生成密码的正确位置。 (可以在确认后向他发送密码)
但在电子邮件中@ resource.password是nil!
如何在设备确认电子邮件中发送给定密码? 替代方案可能是在没有加密的情况下将pwd存储在db中,但我也没有成功。
答案 0 :(得分:6)
对于您提到的问题,这是一个有点hacky但可行的解决方案。
# in views/device/mailer/confirmation_instructions.html.erb:
<% pass = Devise.friendly_token.first(8) %>
<p>Your password is <%= pass %></p>
<% @resource.update_attributes( { :password => pass, :password_confirmation => pass }) %>
这样您就可以为用户设置密码并立即通过电子邮件发送给他们。如果您删除views/device/registration/new.html.erb
和user
字段,则password
创建将失败,您可以保持password_confirmation
中的代码不变。
答案 1 :(得分:0)
我对Kulbir Saini提出的解决方案存在一些问题,因为以这种方式更新密码会使得一些设计回调来更改令牌,使得确认失败。
为了解决这个问题,我采用了Kulbir并修改了一些代码来更新密码,但是避免了任何设计回调。
这可能不是最好的解决方案,但它可以解决问题。
<% pass = @resource.confirmation_token.first(8) %>
<p>Your password is: <%= pass %></p>
<% @resource.update_column(:encrypted_password, ::BCrypt::Password.create("#{pass}")) %>