[RUBY] Comment mettre à jour les informations utilisateur sans mot de passe

environnement

ruby (2.6.5) rails(6.0.0) devise (4.7.2)

Mise en œuvre de la page d'édition des informations utilisateur

Tout d'abord, spécifiez la destination du lien afin que l'édition des utilisateurs / inscriptions # routés soit exécutée.

Prefix                 Verb   URI Pattern               Controller#Action
edit_user_registration GET    /users/edit(.:format)     users/registrations#edit

Comme décrit ci-dessous.

<%= link_to 'Ma page', edit_user_registration_path(current_user), class: "user-nickname" %>

Modifier le contrôleur de périphérique

Étant donné que la fonction de mise à jour des données sans mot de passe est implémentée dans le contrôleur de l'appareil, Générez un contrôleur de périphérique dans le terminal.

$ rails g devise:controllers users

Modifiez le RegistrationsController généré comme suit.

app>controllers>users>registrations_controlle.rb


class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_account_update_params, only: [:update]

  protected
  
  def update_resource(resource, params)
    resource.update_without_password(params)
  end

  def after_update_path_for(_resource)
    root_path
  end

  def configure_account_update_params
    devise_parameter_sanitizer.permit(:account_update, keys: [:nickname])
  end
end

Je mets à jour avec update_resource sans mot de passe. After_update_path_for spécifie la destination de la redirection après la mise à jour. Dans configure_account_update_params, cette fois, seule la colonne appelée surnom dans la table User est autorisée à être mise à jour.

Voir le wiki officiel pour plus de détails. https://github.com/heartcombo/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-providing-a-password

Modifier le fichier de vue du dispositif Modifier

Générez un fichier de vue de l'appareil dans le terminal.

$ rails g devise:views

Modifiez edit.html.view du fichier de vue généré afin qu'il ne contienne que le formulaire d'entrée requis.

erb:app>views>devise>registrations>edit.html.erb


<h2>Edit <%= resource_name.to_s.humanize %></h2>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
  <%= render "devise/shared/error_messages", resource: resource %>

  <div class="field">
    <%= f.label :nickname %><br />
    <%= f.text_field :nickname, autofocus: true, autocomplete: "nickname" %>
  </div>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
  </div>

  <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
    <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
  <% end %>

  <div class="actions">
    <%= f.submit "Update" %>
  </div>
<% end %>

Modifier routes.rb

Modifiez comme suit et spécifiez le contrôleur au moment de l'inscription.

routes.rb


devise_for :users, controllers: {
    registrations: 'users/registrations'
  }

Modification de la validation du mot de passe du modèle utilisateur

Lors de la mise à jour, veillez à ne pas être frappé par la validation du mot de passe Il est ajouté comme on :: create. Avec cette description, la validation du mot de passe ne sera appliquée que lorsque l'action de création est exécutée.

app>models>user.rb


  with_options presence: true do
    validates :nickname, :birthday
    validates :email, uniqueness: true
    validates :first_name, :last_name, format: { with: regexp_name }
    validates :first_name_read, :last_name_read, format: { with: regexp_name_read }
    validates :password, format: { with: regexp_password }, on: :create
  end

En implémentant ce qui précède, nous avons pu mettre à jour le tableau du modèle utilisateur de l'appareil sans mot de passe. Merci de visiter notre site.

Recommended Posts

Comment mettre à jour les informations utilisateur sans mot de passe
Comment mettre à jour les modifications utilisateur dans Rails Devise sans entrer de mot de passe
C'était étonnamment facile. Comment mettre à jour les informations utilisateur sans entrer de mot de passe
[Rails] Comment obtenir les informations sur l'utilisateur actuellement connecté avec devise
Comment créer une classe qui hérite des informations de classe
Comment faire un cache sans trop réfléchir
Comment laisser un commentaire
Comment mettre à jour avec activerecord-import
Comment insérer une vidéo
Comment créer une méthode
Comment générer des valeurs de tableau sans utiliser d'instruction for
Comment joindre une table sans utiliser DBFlute et SQL
Comment donner des informations utilisateur authentifiées à Spring Security autres que userId et mot de passe et comment s'y référer
[Rails] Comment utiliser la "devise" des gemmes
[Rails] Comment utiliser l'appareil (Remarque)
[rails] Comment afficher les informations de base de données
Comment créer un conteneur Java
Comment signer Minecraft MOD
Comment créer un pilote JDBC
[Rails] [Devise] Modifier le profil sans saisir de mot de passe
[Swift] Comment envoyer une notification
Comment créer un écran de démarrage
Comment créer un plug-in Jenkins
Comment stocker les informations saisies dans la zone de texte dans une variable de la méthode
Comment faire un projet Maven
Comment créer un tableau Java
[Rails 5] Comment afficher l'écran de changement de mot de passe lors de l'utilisation de l'appareil
Comment afficher les messages d'erreur et les messages de réussite lors de l'inscription en tant qu'utilisateur
[Rails] Utilisez le dispositif pour obtenir des informations sur l'utilisateur actuellement connecté
[Rails] Comment passer la validation telle que le mot de passe lors de l'exécution d'une action de mise à jour
Comment exécuter un contrat avec web3j
Comment créer un résumé de calendrier Java
Un mémorandum sur l'utilisation d'Eclipse
[Basique] Comment écrire un auto-apprentissage Dockerfile ②
Comment insérer une vidéo dans Rails
Comment ajouter un nouveau hachage / tableau
[Introduction à Java] Comment écrire un programme Java
Comment créer un référentiel Maven pour 2020
Comment créer un robot Discord (Java)
Comment mettre à jour les modèles associés avec accepte_nested_attributes_for
[Swift5] Comment créer un écran de démarrage
[rails] Comment créer un modèle partiel
Comment gérer les erreurs de connexion avec l'appareil
[Note] Comment utiliser Rails 6 Devise + cancancan
Comment publier une bibliothèque dans jCenter
Comment ajouter des informations sur la version de l'application aux informations Sentry