0
# 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 为零!

如何在设备确认电子邮件中发送给定的密码?替代方法可能是将密码存储在数据库中而不加密,但我也没有成功。

4

2 回答 2

5

对于您提到的问题,这有点笨拙但可行。

# 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如果您删除passwordpassword_confirmation字段,创建将失败。

于 2012-07-19T10:01:38.083 回答
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}")) %>
于 2015-07-24T20:55:18.510 回答