[RUBY] So aktualisieren Sie Benutzeränderungen in Rails Devise, ohne ein Kennwort einzugeben

So aktualisieren Sie Benutzeränderungen in Rails Devise, ohne ein Kennwort einzugeben

So aktualisieren Sie Benutzerinformationen in Devise, ohne Ihr aktuelles Kennwort einzugeben.

Inhaltsverzeichnis

Betriebsumgebung

OS : macOS Mojave 10.14.6 ruby : 2.6.5p114 rails : 5.2.4 devise : 4.7.1

Voraussetzungen

Angenommen, Sie haben die Schritte von der Installation des Edelsteins bis zur Erstellung der Ansicht bereits ausgeführt.

  1. Entwickeln Sie einen installierten Edelstein
  2. Schienen erzeugen Gerät installiert
  3. Schienen erzeugen Geräte: Ansichten abgeschlossen
  4. Nicht standardmäßige Spalten wie der Name wurden der Benutzertabelle hinzugefügt

Verfahrensbeschreibung

[STEP1. Fügen Sie einen starken Parameter für die neue Registrierung zu application_controller hinzu] (# Festlegen starker Parameter für die neue Registrierung)

[SCHRITT 2. Erstellen Sie "registrations_controller.rb" in "controller / users /", fügen Sie starke Parameter zum Aktualisieren hinzu, korrigieren Sie das Routing](# Aktualisieren Sie die Einstellungen für starke Parameter)

[SCHRITT 3. Beschreiben Sie die Methode zum Aktualisieren ohne Kennwort in "registrations_controller.rb" und "user.rb".](# Definieren Sie die Methode zum Aktualisieren ohne Kennwort.)

[SCHRITT 4. Entfernen Sie das Feld current_password aus der Ansicht](Entfernen Sie das Feld current_password aus der Datei #view.)

Detaillierte Vorgehensweise

Festlegen starker Parameter für die neue Registrierung

Derzeit wird der später hinzugefügte Namensparameter durch den starken Parameter abgestoßen. Geben Sie den folgenden Code in application_controller ein.

application_controller.rb


class ApplicationController < ActionController::Base
 before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end
end

Wenn Sie dies auf der Konsole überprüfen, können Sie den Parameter name erhalten und einen Benutzer erstellen.

irb(main):001:0> User.create(name: 'abc' , email:'[email protected]',password:'123456')
   (1.3ms)  COMMIT
=> #<User id: 2, email: "[email protected]", created_at: "2020-05-30 10:41:46", updated_at: "2020-05-30 10:41:46", name: "abc">

Als nächstes setzen Sie das Eingabefeld des Namens in Sicht.

html:new.html.erb


<h2>Sign up</h2>

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

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

//hinzufügen
<div class="field">
  <%= f.label :name %><br />
  <%= f.text_field :name, autofocus: true, autocomplete: "name" %>
</div>

<div class="field">
  <%= f.label :password %>
  <% if @minimum_password_length %>
  <em>(<%= @minimum_password_length %> characters minimum)</em>
  <% end %><br />
  <%= f.password_field :password, autocomplete: "new-password" %>
</div>

<div class="field">
  <%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation, autocomplete: "new-password" %>
</div>

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

<%= render "devise/shared/links" %>

Damit ist die Registrierung neuer Benutzer abgeschlossen.

Festlegen starker Parameter für Updates

Fügen Sie dann der Benutzerbearbeitungsansicht auch ein Namensfeld hinzu.

html:edit.html.erb


//hinzufügen
<div class="field">
  <%= f.label :name %><br />
  <%= f.text_field :name, autofocus: true, autocomplete: "name" %>
</div>

Sie können sehen, dass durch Drücken der Aktualisierungstaste hier der Name nicht aktualisiert wird.

Erstellen Sie daher "users / registrations_controller.rb", um die Namensspalte zu aktualisieren und wie folgt zu schreiben.

registrations_controller.rb


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

  protected

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

Ändern Sie dann das Routing, um auf diesen registartions_controller zu verweisen.

routes.rb


Rails.application.routes.draw do
  root 'blogs#index'
  #Änderungen
  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
  resources :blogs
  end

Dann kann die Spalte Name der Benutzer aktualisiert werden.

Definieren Sie eine Methode zum Aktualisieren ohne Kennwort

Wenn Sie jedoch derzeit nicht das aktuelle Kennwort eingeben, tritt während der Aktualisierung ein Fehler auf. image.png

Definieren Sie zunächst eine Methode zum Aktualisieren des Benutzermodells ohne Kennwort.

user.rb


class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  //Methode zum Hinzufügen
  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

Rufen Sie dann "update_without_password" von "registrations_controller" auf.

registrations_controller.rb


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

  protected
  //hinzufügen(Verpflichtend)
  def update_resource(resource, params)
    resource.update_without_password(params)
  end

  //Eine Methode, die nach einem Update zum oberen Bildschirm umleitet, obwohl dies nicht erforderlich ist
  def after_update_path_for(_resource)
    blogs_path
  end

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

Entfernen Sie das Feld current_password aus der Ansichtsdatei

Entfernen Sie "current_password" aus der Ansichtsdatei.

html:edit.html.erb


//Löschen
<div class="field">
  <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
  <%= f.password_field :current_password, autocomplete: "current-password" %>
</div>

Ergebnis

image.png

Sie können sehen, dass der Benutzername fehlerfrei aktualisiert wurde.

image.png

Recommended Posts

So aktualisieren Sie Benutzeränderungen in Rails Devise, ohne ein Kennwort einzugeben
So aktualisieren Sie Benutzerinformationen ohne Kennwort
Es war überraschend einfach. So aktualisieren Sie Benutzerinformationen, ohne ein Kennwort einzugeben
So fügen Sie ein Video in Rails ein
[Rails] So erhalten Sie die aktuell mit devise angemeldeten Benutzerinformationen
So implementieren Sie eine ähnliche Funktion in Rails
So erstellen Sie einfach ein Pulldown mit Rails
So implementieren Sie eine nette Funktion in Ajax mit Rails
Führen Sie devise with Rails ein, um Benutzerverwaltungsfunktionen zu implementieren
[So fügen Sie ein Video mit Rails in haml ein]
So schreiben Sie eine Datumsvergleichssuche in Rails
[Rails 6] So legen Sie ein Hintergrundbild in Rails [CSS] fest
[Rails] So laden Sie JavaScript in einer bestimmten Ansicht
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)
Super einfach in 2 Schritten! So installieren Sie devise! !! (Schienen 5 Version)
[Rails] Wie man Edelstein "devise" benutzt
[Schienen] Verwendung von Geräten (Hinweis)
[Rails] [Devise] Profil bearbeiten, ohne Passwort einzugeben
So installieren Sie jQuery in Rails 6
So installieren Sie Swiper in Rails
So benennen Sie ein Modell mit externen Schlüsseleinschränkungen in Rails um
[Rails 5] Anzeigen des Bildschirms zum Ändern des Kennworts bei Verwendung von devise
So implementieren Sie Suchfunktionen in Rails
So ändern Sie den App-Namen in Rails
[Rails] So konfigurieren Sie das Routing in Ressourcen
[Rails] So erstellen Sie eine Teilvorlage
So implementieren Sie Ranking-Funktionen in Rails
[Hinweis] Verwendung von Rails 6 Devise + Cancancan
So veröffentlichen Sie eine Bibliothek in jCenter
Verwendung von credentials.yml.enc aus Rails 5.2
[Rails] Wie man Geräte ins Japanische übersetzt
So implementieren Sie eine Diashow mit Slick in Rails (einzeln und mehrfach nacheinander)
[Rails] Verwenden Sie devise, um Informationen zum aktuell angemeldeten Benutzer abzurufen
[Rails] So übergeben Sie eine Validierung wie ein Kennwort, wenn Sie eine Aktualisierungsaktion ausführen
[Ruby on Rails] So melden Sie sich nur mit Ihrem Namen und Passwort mit dem Gem-Gerät an
Schienen: Wie man eine Rechenaufgabe schön schreibt
Mit Rails in eine Tag-zu-URL-Zeichenfolge konvertieren
[Rails] Wie schreibe ich, wenn ich eine Unterabfrage mache?
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
So zeigen Sie eine Webseite in Java an
[Rails] Verwendung von Auswahlfeldern in Ransack
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
[Rails6] So verbinden Sie die von Scaffold generierte Buchungsfunktion mit der von devise generierten Benutzerfunktion
So führen Sie eine djUnit-Aufgabe in Ant aus
So fügen Sie in Spring Boot einen Klassenpfad hinzu
So aktualisieren Sie eine vorgefertigte Datei in einem Docker-Container
So erstellen Sie ein Thema in Liferay 7 / DXP
So trennen Sie .scss nach Controller in Rails
So fügen Sie die html.erb-Klasse in Rails bedingt hinzu
So speichern Sie gleichzeitig Daten in einem Modell, das einem verschachtelten Formular zugeordnet ist (Rails 6.0.0)