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_for :users, :controllers => {:sessions => 'sessions', :registrations => 'registrations'}

如何设置设备的忘记密码功能?为什么我会收到此错误消息,为什么要在此处添加该类?

我试过了:

  • 添加我自己的密码控制器并为我的自定义控制器添加新路由。同样的错误
  • 将我自己的类和 id 添加到表单中。这成功更改了表单的 id 和 class,但恢复为 class 和 idnew_user

谢谢。

4

2 回答 2

2

我认为您的主要问题可能是以下之一:

1)你的路线看起来没有正确设置它应该看起来像这样

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

2)您的密码/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/environments/development.rb 内部执行以下操作:

发展.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#create 而不是 password#update

如果是同样的问题,您的表格中的以下内容将使您继续前进:

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

于 2015-01-17T04:15:06.880 回答