1

Devise を使用して、アプリにパスワード リセット機能を実装しようとしています。私は、「パスワードを忘れた」リンクが機能する時点で (電子メールを送信するという点で)、電子メールには「パスワードを変更する」へのリンクが含まれています。

パスワードの変更リンクが機能し、(URL で) 新しいパスワードを要求する (および確認する) フォームに送信されますhttp://localhost:3000/users/password/edit?reset_password_token=c7cKb4hMhSLRs72n9dYjが、新しいパスワードを入力して [パスワードを変更] をクリックすると、次のようにリダイレクトされlocalhost:3000/users/password、「お願いします」と表示されます。以下の問題を確認してください:」と表示され、メール用の 1 つのフィールドと「パスワードのリセット手順を送信する」ボタンが表示されます。これはもちろん、パスワードのリセット手順を取得するためにメールを送信するためのフォームですが、フィールドが空の状態でボタンをクリックしたかのように、「空欄にすることはできません」というエラー通知も表示されます。

チュートリアルを使用して、メールを送信するように ActionMailer を構成しました。これは、このプロセスの最も難しい部分になると思いましたが、パスワードを変更するフォームが機能しない理由がわかりません。

私は Rails を初めて使用し、Devise と ActionMailer を使用するのはこれが初めてなので、必要な情報が含まれていない場合は申し訳ありません。お知らせいただければ、役立つものを追加できます。

ありがとう。

4

1 に答える 1

8

さて、今夜のRailsミーティングで誰かの助けを借りて、何が問題なのかを突き止めました。コントローラーやルートとは実際には何の関係もありませんでしたが、フォームにコードを誤って追加してバグを引き起こしたのです。私のフォームの修正されたコードは次のとおりです。

<h2>Change your password</h2>

<%= simple_form_for(resource, :as => resource_name, :url => password_path(resource_name),
         html: { method: :put, class: "pure-form pure-form-stacked" }) do |f| %>
  <%= f.error_notification %>

  <%= f.hidden_field :reset_password_token %>

  <%= f.input :password, label: "New password", autofocus: true, required: true %>
  <%= f.input :password_confirmation, label: "Confirm new password", required: true %>

  <div><%= f.submit "Change my password", class: "pure-button" %></div>
<% end %>

<%= render "devise/shared/links" %>

class: "pure-form pure-form-stacked私の問題は、行を 2 番目のキーと値のペアとしてに含める代わりにhtml: {}、2 番目のhtml: {}行があったことです。

それが明確でない場合、私はこれを持っていました:

html: { method: :put },
html: { class: "pure-form pure-form-stacked" }

これの代わりに:

html: { method: :put, class: "pure-form pure-form-stacked" }

何らかの理由で、最初のバージョンでは、2 番目のバージョンのみがフォームと共に送信されたため、リクエストhtml: {}として処理されませんでした。put

于 2013-10-30T04:03:01.270 に答える