[RUBY] [Rails] [Devise] Modifier le profil sans saisir de mot de passe

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.

environnement

ruby 2.7.2 rails 5.2.4.4

Routage fixe des appareils

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éer registrations_controller.rb

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

Implémentation de la méthode update_without_current_password dans le modèle utilisateur

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.

Changer la destination de la redirection après avoir modifié le profil

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

[Rails] [Devise] Modifier le profil sans saisir de mot de passe
[Rails] concevoir
[Rails] Présentation du dispositif
Comment mettre à jour les modifications utilisateur dans Rails Devise sans entrer de mot de passe
[Rails] conçoit une méthode d'aide
Comment mettre à jour les informations utilisateur sans mot de passe
[Rails] Personnaliser la validation de l'appareil
Manipuler le dispositif avec des rails
[Rails] Annuler / modifier la validation du mot de passe du périphérique définie par défaut
[Rails] conçoit une méthode d'introduction
[Rails] Comment modifier et personnaliser les vues et les contrôleurs de conception
[rails] concevoir les valeurs par défaut
Mettre en œuvre la page de modification de devise
[Rails] Introduction aux principes de base du dispositif
Qu'est-ce que Rails Gem Concevoir?
[Rails] Flux lors de l'installation du dispositif de gemmes
[Rails] Ajouter une colonne à concevoir
[rails] erreur lors de l'installation du périphérique
[rails] Les modifications de la page d'affichage créées par l'appareil ne sont pas reflétées
[Rails 5] Comment afficher l'écran de changement de mot de passe lors de l'utilisation de l'appareil