当用户的电子邮件输入忘记的密码表单并提交时,我收到错误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的忘记密码功能?为什么我收到此错误消息,为什么要在那里添加该类?
我试过了:
new_user
的类和ID 感谢。
答案 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
如果是同一个问题,表单中的以下内容将帮助您:
<input type="hidden" name="_method" value="put" />
&#13;