【问题标题】:devise password in confirm email在确认电子邮件中设计密码
【发布时间】:2012-07-19 08:16:14
【问题描述】:
# 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 是零!

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

【问题讨论】:

  • 请不要错误地将密码以纯文本形式存储在数据库中。把这个留给大军团。此外,您无需在用户注册或尝试恢复其帐户时向他们发送密码。检查confirmable 设计模块。 github.com/plataformatec/devise
  • 我尊重您的意见,我想跟随,但我不想用 3 个步骤来惹恼用户。我同意自己使用确认,但仅此而已。有一些示例可以生成密码....但是用户在确认后如何登录?唯一的可能性是重置密码,但我最初也可以给用户密码和确认输入,这是一个要求(自动生成它)。在电子邮件中发送生成的密码的唯一解决方案!对吗?
  • 那么我想最好的方法是让用户最初选择他们的密码。另外,无论你最终选择哪种方式,请避免在db中使用纯文本密码。
  • 非常感谢您的建议......但我的理念是它应该做需要做的事情,而不是强制要求它可以处理的事情。关于在数据库中保存密码;我不想要...这就是为什么我在流程中使用确认电子邮件 => 它必须仍然可用,必须有办法将其交给邮寄者。确认后我想这是不可能的 - 好的。

标签: ruby-on-rails-3 email devise passwords


【解决方案1】:

对于您提到的问题,这是一个有点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 中的代码不变,因为如果删除passwordpassword_confirmation 字段,user 创建将失败。

【讨论】:

    【解决方案2】:

    我对 Kulbir Saini 提出的解决方案有一些问题,因为以这种方式更新密码会导致一些设计回调来更改令牌,从而导致确认失败。

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

    这可能不是最好的解决方案,但可以解决问题。

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

    【讨论】:

      猜你喜欢
      • 2013-07-11
      • 1970-01-01
      • 2017-02-22
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 2019-08-04
      相关资源
      最近更新 更多