我正在使用 bcrypt-ruby 进行密码加密。在 gem http://bcrypt-ruby.rubyforge.org/的文档中,他们提供了一个允许某人重置密码的操作。我正在尝试执行此操作。
我在登录页面上添加了以下代码:
<p>Forgot your Password? <%= link_to "Click to reset your password", forgot_password_session_path, confirm: "Do you really want to reset your password?" %></p>
这是我的 sessions_controller.rb 文件中的代码:
def forgot_password
random_password = Array.new(10).map { (65 + rand(58)).chr }.join
case
when User.find_by_email(params[:session][:email_user])
user = User.find_by_email(params[:session][:email_user])
when User.find_by_username(params[:session][:email_user])
user = User.find_by_username(params[:session][:email_user])
end
user.password = user.password_confirmation = random_password
user.save!
Mailer.create_and_deliver_password_change(user, random_password)
end
这是 config/routes.db 中的定义:
resources :sessions do
member do
get "forgot_password"
end
end
这是 rake 路由的输出:
forgot_password_session GET /sessions/:id/forgot_password(.:format) sessions#forgot_password
当我尝试单击登录链接上的链接时,出现以下错误:
没有路由匹配 {:action=>"forgot_password", :controller=>"sessions"}
我不知道它是如何说没有路线匹配的,但它看起来确实如此。我已经重新启动了我的 Rails 服务器和 spork,但仍然出现错误。我不知道下一步。
任何帮助将不胜感激。
更新 2012 年 5 月 26 日上午 9:14 GMT-6:
我更改为 POST,重新启动我的 Rails 服务器和 Spork。我得到了同样的错误。这是我来自服务器的日志:
在 2012 年 5 月 26 日 09:13:36 -0500 开始 GET "/login" for 127.0.0.1 由 SessionsController#new 处理为 HTML 在布局/应用程序中呈现 session/new.html.erb (112.4ms) 完成 500 内部服务器116 毫秒内的错误
这是耙路线信息:
forgot_password_session POST /sessions/:id/forgot_password(.:format) sessions#forgot_password