gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:34:06 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com