希望设计 Models::Recoverable 根据用户状态发送不同的重置指令
Would like Devise Models::Recoverable to send different reset instructions based on user state
我们的用户模型包含一个名为 user_state 的参数。我们想发送四封不同的电子邮件说明,说明用户必须根据 user_state 重置密码的方式和原因:new_user、password_forgotten(用户已请求重置密码)、inactive (最近未使用帐户)和暂停(由于某些不良行为导致登录被禁用)。
在上述所有状态下,我们首先要将当前密码设置为随机密码,然后为每种状态类型发送自定义电子邮件。
我找到了发送重置邮件的 Devise send_reset_password_instructions
方法。但是我无法根据上面列出的 user_state 找到发送不同电子邮件内容的合理方法。
有什么建议吗?
您可以通过多态化邮件程序视图来做到这一点。假设您的 UserMailer
中有 reset_password_email(user)
方法来发送该消息。你有 2 种可能的状态:master
和 slave
(只是一个例子)。
因此,为了生成 2 个不同的消息体,您将它们放在 app/views/user_mailer/_master.html.erb
和 app/views/user_mailer/_slave.html.erb
中的不同部分(或者您使用的任何 html 解析器,我更喜欢 slim)。
然后您只需要像这样在 app/views/user_mailer/reset_password_email.html.erb
中输入正确的调用:
<%= render partial: @user.state, user: @user %>
我们的用户模型包含一个名为 user_state 的参数。我们想发送四封不同的电子邮件说明,说明用户必须根据 user_state 重置密码的方式和原因:new_user、password_forgotten(用户已请求重置密码)、inactive (最近未使用帐户)和暂停(由于某些不良行为导致登录被禁用)。
在上述所有状态下,我们首先要将当前密码设置为随机密码,然后为每种状态类型发送自定义电子邮件。
我找到了发送重置邮件的 Devise send_reset_password_instructions
方法。但是我无法根据上面列出的 user_state 找到发送不同电子邮件内容的合理方法。
有什么建议吗?
您可以通过多态化邮件程序视图来做到这一点。假设您的 UserMailer
中有 reset_password_email(user)
方法来发送该消息。你有 2 种可能的状态:master
和 slave
(只是一个例子)。
因此,为了生成 2 个不同的消息体,您将它们放在 app/views/user_mailer/_master.html.erb
和 app/views/user_mailer/_slave.html.erb
中的不同部分(或者您使用的任何 html 解析器,我更喜欢 slim)。
然后您只需要像这样在 app/views/user_mailer/reset_password_email.html.erb
中输入正确的调用:
<%= render partial: @user.state, user: @user %>