ruby-on-rails - 设计-可恢复(密码重置)

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

我试图允许用户使用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/

相关文章:

ruby-on-rails - Rails - 用于集合集的单选按钮

ruby-on-rails - 我可以在 rails 上使用 option_groups_from_collection_for_select 和 include_blank 吗?

ruby-on-rails - 如何为电子邮件设置 Devise 发件人姓名

encryption - Web 应用程序密码 : bcrypt and SHA256 (and scrypt)

c++ - 如何要求输入密码才能关闭窗口?

ruby-on-rails - 事件模型序列化器 : undefined method `url_for' for nil:NilClass

ruby-on-rails - Rails + Capybara + poltergeist ArgumentError : rack-test requires a rack application,,但是没有给出

javascript - jquery通过ID获取元素问题

mysql - 无法加载这样的文件 -- mysql/mysql_api

javascript - 在客户端 JavaScript 中存储 Web 应用程序的用户密码 - 这安全吗?