パスワードの暗号化に 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-05-26 09:13:36 -0500 で 127.0.0.1 の GET "/login" を開始 HTML として SessionsController#new による処理 レイアウト/アプリケーション内で sessions/new.html.erb をレンダリング (112.4ms) 完了 500 内部サーバー116ms のエラー
レーキ ルート情報は次のとおりです。
forgot_password_session POST /sessions/:id/forgot_password(.:format) sessions#forgot_password