我正在尝试使用Devise实现一个重置密码页面。
我想要实现的是在更新密码后将页面重定向到不同的路径。因此,我根据文档对passwords_controller.rb
进行了更改。
我的控制器看起来像这样:
class Users::PasswordsController < Devise::PasswordsController
# basic is my html.erb file for layout purpose....
layout "basic"
def edit
render :edit
end
def after_resetting_password_path_for(resource)
root_path
end
end
在我的routes.rb
文件中。我已经包括了密码控制器的路线:
devise_for :users, :controllers => {
:sessions => "users/sessions",
:passwords => "users/passwords",
}
在这里,我可以访问app/views/passwords/edit.html.erb
中的视图。
问题是after_resseting_password_path_for
方法(在passwords_controller.rb
中被重写)没有被执行,并且我被重定向到输出中的同一页,而不是root_path
。此外,也没有进行更新。
是Devise中实现的更新方法有问题,还是我遗漏了什么?
我怀疑,由于您已经覆盖了默认的Devise PasswordsController
,您的edit
操作希望发布到同一控制器中的update
操作,但没有。尝试将您的自定义控制器更新为以下内容:
class Users::PasswordsController < Devise::PasswordsController
layout "basic"
def edit
render :edit
end
def update
render :update
end
def after_resetting_password_path_for(resource)
root_path
end
end
或者,我认为如果在ApplicationController
中指定after_resetting_passwords_path
,则可以完全绕过覆盖Devise::PasswordsController
(尽管您需要有条件地在ApplicationController
中设置布局)。
这可能会有所帮助。。我用这个就行。。只是分享。。http://www.stumbleupon.com/su/34E99D#