Dans l'état par défaut de Devise, vous devez entrer le mot de passe, le mot de passe de confirmation et le mot de passe actuel pour modifier le profil.
Comme il est très gênant pour l'utilisateur de saisir le mot de passe pour modifier le profil, nous avons rendu possible la modification des informations de profil sans saisir le mot de passe.
Je vais l'afficher comme un disque d'oubli.
ruby 2.7.2 rails 5.2.4.4
config/routes.rb
Rails.application.routes.draw do
devise_for :users, #Ajoutez une virgule à la ligne ici
controllers: { registrations: 'registrations' } #Ajouter une ligne ici
Créez registrations_controller.rb
dans app / controllers /
.
Ajoutez le code suivant à registrations_controller.rb
app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
protected
def update_resource(resource, params)
resource.update_without_current_password(params)
end
end
Ajoutez le code suivant à app / models / user.rb
app/models/user.rb
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
# ============ajouter à====================
def update_without_current_password(params, *options)
params.delete(:current_password)
if params[:password].blank? && params[:password_confirmation].blank?
params.delete(:password)
params.delete(:password_confirmation)
end
result = update_attributes(params, *options)
clean_up_passwords
result
end
# ====================================
end
Vous pouvez désormais modifier les informations de votre profil sans avoir à saisir votre mot de passe. Vous pouvez également modifier le mot de passe.
S'il s'agit de la valeur par défaut de Devise, après avoir modifié le profil, ** il passera à la première page **.
Après avoir modifié le profil, je souhaite rediriger vers la page de profil de l'utilisateur ** connecté **, j'ai donc ajouté le code suivant à registrations_controller.rb
.
app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
protected
def update_resource(resource, params)
resource.update_without_current_password(params)
end
# ============ajouter à====================
def after_update_path_for(resource)
user_path(resource)
end
# ====================================
end
La méthode after_update_path_for
est une méthode fournie par Devise, et vous pouvez spécifier le chemin vers lequel effectuer la transition après la mise à jour du compte.
c'est tout!
Site référencé https://easyramble.com/user-account-update-without-password-on-devise.html
Recommended Posts