我們想做到當使用者想要更改密碼的時候,可以在他的使用者後台按一個按鈕,就可以寄修改密碼的信件給他。devise預設是做不到的,因為處理寄送修改密碼信件的PasswordsController
有個prepend_before_filter :require_no_authentication
限制了使用者必須是未登入的狀態下才可以寄送修改密碼的信件。
首先要建立一個自己的PasswordController
繼承原本的Devise::PasswordsController
,接著使用skip_before_filter :require_no_authentication, :only => [:create, :edit, :update]
取消原本的filter。如果要在更改密碼的時候不讓使用被登出,還要overrideupdate
這個method。
app/controllers/users/passwords_controller.rb
class Users::PasswordsController < Devise::PasswordsController
skip_before_filter :require_no_authentication, :only => [:create, :edit, :update]
def update
super
if resource.errors.empty?
sign_out(resource_name)
sign_in(resource_name, resource)
end
end
end
最後要記得修改routes讓devise使用你的controller。
config/routes.rb
devise_for :users, :controllers => {:passwords => 'users/passwords'}