0%

gem-devise-如何略過編輯user資料時,必須提供密碼的步驟?

  1. 因為devise預設都是吃Devise controller(如Devise::RegistrationsController),所以如果要更改設定,必須先建立另一個controller蓋過原始設定。

    1
    2
    $ rails generate devise:controllers [scope]
    #這邊的scope我使用users

    devise會幫你建立八個controller,如果不想那麼多,可以用以下指令替代

    1
    2
    $ rails generate devise:controllers users -c=sessions
    #只建立sessions這個controller
  2. 到routes.rb這邊放入這段code,告訴router使用我們建立的controller

    1
    2
    devise_for :users, controllers: { registrations: 'registrations' }
    # 其他controller如需要也可比照辦理
  3. 在registration.controller底下,放入這段code

    1
    2
    3
    def update_resource(resource, params)
    resource.update_without_password(params)
    end
  4. 在application_controller.rb裡面,放入這段code,讓我們新建的欄位,可以被params抓到並傳送

    1
    2
    3
    4
    def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
    devise_parameter_sanitizer.permit(:account_update, keys: [:name])
    end

    如此一來,就可以在不需要輸入密碼的情況下更改資料。