我试图允许用户使用Devise的可恢复选项重置密码。这似乎对我不起作用。
我扩展了Devise::PasswordsController
,使其不使用应用程序布局。
class PasswordsController < Devise::PasswordsController
layout false
end
在我的 route ,我确保使用我的密码 Controller 。
devise_for :users, :controllers => {:passwords => "passwords"}
resources :passwords
这是我的用户模型,因此您可以看到我有
:recoverable
选项。devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
在我的登录页面上,我拥有(我正在使用haml):
...
= link_to "Forgot your password?", new_password_path(resource_name)
这个链接正确地带我到
http://localhost:3000/users/password/new
,这是在那里找到的形式:%h2 Forgot your password?
= 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= f.submit "Send me reset password instructions"
但是,当我单击按钮时,这似乎试图将我带到错误的位置。每次都失败,并且在服务器日志中不显示任何电子邮件。
它将我重定向到:
http://localhost:3000/passwords/user
并告诉我:路由错误
No route matches "/passwords/user"
知道我该如何进行吗?我认为使用可恢复的选项比这要容易。我究竟做错了什么?
更新
作为记录,我只是删除了所做的一切,并尝试使用标准的devise Controller ,并修改了我的应用程序布局,以使其不会导致错误,并且一切正常。因此,我只需要一种从密码重设页面中删除应用程序布局的好方法。
最佳答案
似乎是当您在 View 代码中调用password_path(resource_name)
时,路由系统认为您的意思是/passwords/resource_name
,而不是Devise在users
下命名的 Controller 。这是因为你有线
resources :passwords
直接在您的路由文件中的
devise_for
调用下。现在,我不确定那条线是否存在是有原因的,但是当您注释掉它时,您的问题会消失吗?
关于ruby-on-rails - 设计-可恢复(密码重置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8537220/