2012-07-19 52 views
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是零!

如何在设备确认电子邮件中发送给定的密码? 替代方案可能是在没有加密的情况下将密码存储在分贝中,但我也没有成功。

+0

请不要将密码以纯文本形式存储在数据库中。离开这个大军团。此外,您无需在注册或尝试恢复其帐户时向用户发送密码。检查可确认的设计模块。 https://github.com/plataformatec/devise/ – 2012-07-19 08:20:54

+0

我尊重你的意见,我想跟随,但我不想用3个步骤来吸引用户。我同意自己使用确认,但这应该是全部。有一些例子可以生成密码....但是用户在确认后如何登录?唯一的可能是reset_password,但是我可以给用户最初的密码和确认输入,这是一个要求(自动生成它)。只有在邮件中发送密码的解决方案!对? – guefi 2012-07-19 08:40:03

+0

那么我想最好的方法是让用户最初选择他们的密码。另外,无论您选择什么方式,请在数据库中避免纯文本密码。 – 2012-07-19 08:43:18

回答

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 }) %> 

这样,您可以为您的用户设置密码并立即发送给他们。如果您删除passwordpassword_confirmation字段,则可以保持views/device/registration/new.html.erb中的代码不变,因为user创建将失败。

+1

嘿...多数民众赞成在一个好主意..非常感谢你 – guefi 2012-07-19 17:52:57

0

我对Kulbir Saini提出的解决方案存在一些问题,因为以这种方式更新密码会使一些设计回调更改令牌,使得确认失败。

为了解决这个问题,我采取了Kulbir's并修改了一些代码来更新密码,但是避免了任何设计回调。

这可能不是最好的解决方案,但它有诀窍。

<% pass = @resource.confirmation_token.first(8) %> 
<p>Your password is: <%= pass %></p> 
<% @resource.update_column(:encrypted_password, ::BCrypt::Password.create("#{pass}")) %>