Я использую Omniauth, чтобы позволить пользователям войти (и создать учетную запись) через Facebook, Twitter и Google.
Однако, если пользователь решит больше не использовать эти службы, но продолжит использовать свою учетную запись, он захочет добавить пароль.
Как разрешить пользователю добавлять пароль к своей учетной записи, не вводя current password
? *
Когда я позволяю пользователю перейти на edit_user_registration_path(@user)
, он видит форму ниже:
= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, name: 'validation'}) do |f|
= devise_error_messages!
= f.label :email, class: 'block'
= f.email_field :email, class: 'large'
%span.infobar Keep this here unless you'd like to change your email
= f.label :password, class: 'block'
= f.password_field :password, class: 'large'
%span.infobar Leave blank if you don't want to change it
= f.label :password_confirmation, class: 'block'
= f.password_field :password_confirmation, class: 'large'
- if @user.password_required?
= f.label :current_password, class: 'block'
= f.password_field :current_password, class: 'large'
%span.infobar We need your current password to confirm changes
= f.submit "Update"
user.rb
def password_required?
(authentications.empty? || !password.blank?) && super
end
Как видите, у меня так, что если @user.password_required?
, то покажите поле текущего пароля. Даже если это поле не отображается при попытке создать новый пароль для учетной записи, форма не будет корректно подтверждена, так как требуется текущий пароль.