0

パスワードを忘れた方のフォームにユーザーのメールアドレスを入力して送信すると、 というエラーが表示されますlogin can't be blank。このエラー メッセージを探しdevise.en.ymlましたが、どこにも見つからないようです。

これが私のものviews/devise/passwords/new.html.hamlです:

%div.registration_page
  %h2 Forgot your password?
  = form_for(resource, :as => resource_name, :url => user_password_path, :html => { :method => :post, :id => 'forgot_pw_form', :class => 'forgot_pw' }) do |f|
    %div
      = f.email_field :email, :placeholder => 'Email', :autofocus => true, :autocomplete => 'off'
      %div.email_error.error
    %input.btn.btn-success{:type => 'submit', :value => 'Send Instructions'}
  = render "devise/shared/links"

フォームは投稿されusers/passwordているはずですが、パスワードを忘れたフォームが添付されていることに気付きましたclass = 'new_user'。私のフォームが表示するものは次のとおりです。

<form accept-charset='UTF-8' action='/users/password' class='new_user' id='forgot_pw_form' method='post' novalidate='novalidate'></form>

devise のルート (カスタム セッションと登録コントローラーがあります):

devise_for :users, :controllers => {:sessions => 'sessions', :registrations => 'registrations'}

デバイスのパスワードを忘れた場合の機能を設定するにはどうすればよいですか? このエラー メッセージが表示されるのはなぜですか? また、そのクラスがそこに追加されるのはなぜですか?

私はもう試した:

  • 独自のパスワード コントローラーを追加し、カスタム コントローラーに新しいルートを追加します。同じエラー
  • 独自のクラスと ID をフォームに追加します。これにより、フォームの id とクラスが正常に変更されますが、クラスと id に戻りますnew_user

ありがとう。

4

2 に答える 2

2

私はあなたの主な問題は次のいずれかである可能性があると思います:

1)ルートが正しく設定されていないようです。次のようになります。

   devise_for :users, :controllers => {:sessions => 'devise/sessions', :registrations => 'devise/registrations', :passwords => 'devise/passwords'}, :skip => [:sessions] do

2)passwords / new.html.erbが少し間違っているように見える場合は、次を試してください。

<h2>Forgot your password?</h2>

<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :email %><br />
  <%= f.email_field :email %></div>

  <div><%= f.submit "Send me reset password instructions" %></div>
<% end %>

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

3)config / environment / development.rbの内部で、次の手順を実行します。

Development.rb

#Defined SMTP options
  #config.action_mailer.default_url_options = { :host => "77.100.90.77:3000"
  #SMTP
  config.action_mailer.default_url_options = { :host => 'localhost:3000/' }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      :address              => 'smtp.gmail.com',
      :port                 => 587,
      :domain               => 'gmail.com',
      :user_name            => '*****@gmail.com',
      :password             => 'PASS',
      :authentication       => 'login',
      :enable_starttls_auto => true
  }

この設定から、テスト目的でGmailを使用していることがわかります。私が提供したものに従うと、問題が解決するはずです。これが機能するかどうか教えてください。

アップデート

authentication_keysが:usernameを必須フィールドとして設定していると想定します。

app / views / devise / passwords / new.html.erbを編集して、以下を置き換えてみてください。

<%= f.label :email %>
<br />
<%= f.text_field :email %>

と:

<%= f.label :username %>
<br />
<%= f.text_field :username %>
于 2012-11-20T22:02:37.850 に答える
2

私もこの問題を抱えていました。_method タグが欠落していたため、password#update ではなく password#create にルーティングされていました

同じ問題である場合は、フォームに次のように記述してください。

 <input type="hidden" name="_method" value="put" />

于 2015-01-17T04:15:06.880 に答える