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-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
4

1 に答える 1

0

POST リクエストである必要がある場合があります。私が Rails のクラスを受講したとき、インライン リンク呼び出しの配置に一貫性がありませんでした。このエラーが発生する理由は、routes ファイルが POST ではなく GET 用に構成されているためです。暗闇の中でのショットですが、同じ行を POST で追加してみてください。

于 2012-05-26T01:03:17.487 に答える