我正在尝试使用Devise实现重置密码页面。
我想要实现的是在更新密码后将页面重定向到不同的路由。因此,我根据the documentation在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中实现更新方法的问题还是我遗漏了什么?
答案 0 :(得分:1)
我怀疑 - 由于您已覆盖默认设计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
另外,我想如果你要在after_resetting_passwords_path
中指定ApplicationController
,你就可以绕过覆盖{{ 1}}完全(尽管您需要在Devise::PasswordsController
)中有条件地设置布局。
答案 1 :(得分:1)
这可能会有所帮助..我使用它,它工作..只是分享.. http://www.stumbleupon.com/su/34E99D#