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 は nil です!

デバイス確認メールで特定のパスワードを送信するにはどうすればよいですか? 代わりに、暗号化せずに pwd を db に保存することもできますが、これでも成功しませんでした。

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変更せずにそのままにしておくことができます。userpasswordpassword_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 に答える