2017-04-04 14 views
3

私のアプリケーション内にDevise::RegistrationsControllerでレンダリングされる登録/編集フォームがあります。フォームの更新時に、現在のパスワードを入力する必要があります。私がそれを動作させたいのは、passwordフィールドを更新しているときにのみcurrent_passwordが必要であるか、または確認の手段として "new_password"を繰り返す必要があるということです。私はDevise Wikiで主に以下のリンクを読んでいますが、これについては解決策を挙げていないようです。誰かがこれがどのように達成されるかについてのいくつかの洞察力を持っていれば、私はそれを感謝します。あなたは何ができるかパスワードの変更登録時にのみパスワードを要求する

https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-password

https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-providing-a-password

答えて

1

私は解決策を見つけようとしてきました。解決策を見つけました。私のモデルでは

(user.rb)私は、次のコードスニペットに:validatableを追加しました:私の登録コントローラに続いて

devise :omniauthable, :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, 
    :confirmable, :trackable, reset_password_keys:[:email, :company_id], 
    request_keys: [:host, :params], omniauth_providers: [:auth0] 

、私は次のように追加しました:

def update_resource(resource, params) 
    if !params[:password].blank? 
    resource.password = params[:password] 
    resource.password_confirmation = params[:password_confirmation] 
    end 

    resource.update_without_password(params) 
end 

そして最後にで私のアプリケーションコントローラ、私は:password_confirmationを次のスニペットに追加しました:

devise_parameter_sanitizer.permit(:account_update) do |u| 
    u.permit(:first_name, :last_name, :email, :password, :password_confirmation, :phone_number, :receive_emails, 
      location_attributes: [:id, :street, :city, :state, :zip, :country]) 
end 

この組み合わせでは、フォームが送信されると、それは私が上書きしたupdate_resourceブロックに入ります。 resource.passwordpassword_confirmationが同じであることを確認します。これに加えて、current_passwordが外れているので、変更を保存するたびにパスワードを入力する必要がなくなりました。

1

ユーザーがのparams params[:user][:password]params[:user][:password_confirmation]を通じて、そのアカウントへの更新を行うことを一度に検証することです:

この方法がある場合passwordでもpassword_confirmationでもuser_paramsにはupdate_without_passwordメソッドを使用し、もう1つはupdate_attributesメソッド

を使用します
def update 
    ... 
    if params[:user][:password].blank? && params[:user][:password_confirmation].blank? 
     if @user.update_without_password(user_params) 
     flash[:notice] = 'User updated successfully' 
     redirect_to some_path 
     else 
     render :edit 
     end 
    else 
     if @user.update_attributes(user_params) 
     # login before update passing the current user 
     sign_in(User.find(current_user.id), :bypass => true) 
     flash[:notice] = 'User updated successfully' 
     redirect_to some_path 
     else 
     render :edit 
     end 
    end 
    ... 
    end 
+0

私はあなたの助けに感謝し、これは私のために働かなくなった。私は見つけた解決策を投稿しました –

関連する問題