设计密码重置问题(new_user?)

时间:2012-11-20 21:29:46

标签: ruby-on-rails ruby ruby-on-rails-3 devise

当用户的电子邮件输入忘记的密码表单并提交时,我收到错误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'}

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

我试过了:

  • 添加我自己的密码控制器并为我的自定义控制器添加新路由。同样的错误
  • 将自己的类和ID添加到表单中。这会成功更改表单的ID和类,但会返回到new_user的类和ID

感谢。

2 个答案:

答案 0 :(得分: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执行以下操作:

<强> 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设置:用户名为必填字段。

尝试编辑app / views / devise / passwords / new.html.erb,然后替换:

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

使用:

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

答案 1 :(得分:2)

我也有这个问题。我错过了_method标记,因此它路由到密码#create而不是密码#update

如果是同一个问题,表单中的以下内容将帮助您:

&#13;
&#13;
 <input type="hidden" name="_method" value="put" />
&#13;
&#13;
&#13;