0

我正在使用 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
4

1 回答 1

0

It may need to be a POST request. When I took a rails class, putting inline link calls was inconsistant. The reason you have that error is that your routes file is configured for a GET, not a POST. Just a shot in the dark, but try adding the same line but with a POST.

于 2012-05-26T01:03:17.487 回答