使用设计发送重置密码说明
Posted
技术标签:
【中文标题】使用设计发送重置密码说明【英文标题】:Send Reset Password Instructions with Devise 【发布时间】:2013-10-18 21:48:07 【问题描述】:我正在尝试使用带有 Rails 的设计发送重置密码说明。用户单击“忘记密码链接”,然后输入他们的电子邮件地址以接收重置密码说明。我看到电子邮件是在开发日志中发送的,但我没有收到我的测试电子邮件,我看到下面的错误。关于我做错了什么有什么想法吗?
Timeout::Error - execution expired
在 user_mailer.rb 中,我有以下内容:
class UserMailer < ActionMailer::Base
include Devise::Mailers::Helpers
default :from => ENV["EMAIL_ADDRESS"]
def reset_password_instructions(record, opts=)
mail(:to => record, :subject => "Reset Password Instructions")
end
end
我正在开发中进行测试,所以我的 development.rb 有以下内容:
# ActionMailer Config
config.action_mailer.default_url_options = :host => 'localhost:3000'
config.action_mailer.delivery_method = :smtp
# change to true to allow email to be sent during development
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default :charset => "utf-8"
config.action_mailer.smtp_settings =
:address => "smtp.mandrillapp.com",
:port => 25,
:user_name => ENV["MANDRILL_USERNAME"],
:password => ENV["MANDRILL_API_KEY"],
:enable_starttls_auto => true, # detects and uses STARTTLS
:authentication => 'login', # Mandrill supports 'plain' or 'login'
:domain => 'mydomain.com', # your domain to identify your server when connecting
在 user.rb 中,我有以下内容:
def send_reset_password_instructions
UserMailer.reset_password_instructions(self.email).deliver
end
正如我上面提到的,我看到在超时之前正在日志中生成电子邮件 - 下面是完整的堆栈跟踪:
Started GET "/users/password/new" for 127.0.0.1 at 2013-10-10 17:32:24 -0500
Processing by Devise::PasswordsController#new as html
Rendered devise/passwords/new.html.erb within layouts/application (3.7ms)
Rendered layouts/_navigation.html.erb (1.6ms)
Rendered layouts/_messages.html.erb (0.1ms)
Completed 200 OK in 101ms (Views: 100.6ms | ActiveRecord: 0.0ms)
Started POST "/users/password" for 127.0.0.1 at 2013-10-10 17:32:28 -0500
Processing by Devise::PasswordsController#create as HTML
Parameters: "utf8"=>"✓", "authenticity_token"=>"CebAAlhJgxz1yDEi5BvsJ/dOdUpAHl08yrG1NCVgi/o=", "user"=>"email"=>"me@gmail.com", "commit"=>"Continue"
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."email" = 'me@gmail.com' LIMIT 1
Rendered user_mailer/reset_password_instructions.html.erb (0.1ms)
Sent mail to me@gmail.com (30018ms)
Date: Thu, 10 Oct 2013 17:32:28 -0500
From: info@mydomain.com
To: me@gmail.com
Message-ID: <52572afc78c10_e9e43ffb7d69b4ec31274@Patricks-MacBook-Air.local.mail>
Subject: Reset Password Instructions
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<p>Hello!</p>
<p>Someone has requested a link to change your password. You can do this through the link below.</p>
<p>If you didn't request this, please ignore this email.</p>
<p>Your password won't change until you access the link above and create a new one.</p>
Completed 500 Internal Server Error in 30044ms
【问题讨论】:
您是否使用您的 Mandrill 帐户成功发送了电子邮件?我建议尝试MailCatcher 在开发中发送邮件。如果可行,您可以开始缩小配置中的问题所在。 谢谢 - 我试过 MailCatcher,它显示消息已正确发送(尽管我没有通过电子邮件收到它)。有关排除山魈配置的任何想法?我已经让 mailchimp 运行良好一段时间了,用于发送欢迎消息并将用户添加到一般电子邮件活动中,但还没有弄清楚交易电子邮件。谢谢 MailCatcher 拦截外发邮件并使其在 Web 界面中可用,因此您不应该收到它。相反,您应该能够在浏览器中的 127.0.0.1:1080 处看到它。至于 Mandrill,我相信你仍然需要在主机上设置 postfix 或其他一些 smtp 接口,如果你还没有这样做的话。这是一个相当普遍的问题,因此您应该能够在 Google 上搜索详细信息或您的操作系统设置。 【参考方案1】:点击以下链接:。
https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-password
【讨论】:
以上是关于使用设计发送重置密码说明的主要内容,如果未能解决你的问题,请参考以下文章