Das Rails-Tutorial ist endlich vorbei. Als ich Devise of Gem einfügte, war ich überrascht, dass die Implementierung von 5 bis 6 Kapiteln im Rails-Tutorial in etwa 10 Minuten abgeschlossen war.
Ich weiß nicht warum es gemacht wurde ... Ich möchte einen Test schreiben, weiß aber nicht, wie ich ihn schreiben soll. Also sagte ich: "Lass uns den offiziellen Code und den Quellcode lesen", aber ich lese ihn, aber ich verstehe ihn überhaupt nicht ... aber ich möchte ihn nach und nach verstehen, also werde ich ihn lesen.
Beim Lesen werde ich zusammenfassen, was ich untersucht habe.
** ・ Ich bin ein Anfänger, möchte aber wissen, wie Devise funktioniert **
Ich hoffe es hilft so einer Person.
GitHub von Devise https://github.com/heartcombo/devise
Ganz am Anfang der GitHub README steht eine Übersicht.
--Devise ist eine Warden-basierte flexible Authentifizierungslösung für Rails.
- Gestellbasis.
- Eine vollständige MVC-Lösung basierend auf der Rails-Engine.
- Sie können sich gleichzeitig bei mehreren Modellen anmelden.
- Basierend auf dem Konzept der Modularität. Verwenden Sie nur das, was Sie wirklich brauchen.
Der Aufseher, der hier erscheint, ist ein Juwel für die Authentifizierung, und es scheint, dass er dies in die Irre führt.
Außerdem besteht es aus 10 Modulen, und es scheint, dass Sie das verwenden sollten, was Sie benötigen, während Sie es auskommentieren. Es ist ein Modul oder eine Funktion. Es gab eine Person, die in Qiita einen Tisch gemacht hat, also werde ich ihn unten zitieren.
|Funktion|Überblick| |:-----------------|:----------------| |database_authenticatable |Bei der Anmeldung wird das Kennwort gehasht und in der Datenbank registriert, um die Gültigkeit des Benutzers zu überprüfen. Sie können die POST-Anforderung oder die HTTP-Basisauthentifizierung als Authentifizierungsmethode verwenden.| |registerable |Melden Sie den Benutzer über den Registrierungsprozess an. Außerdem können Benutzer ihre Konten bearbeiten und löschen.| |recoverable |Setzen Sie Ihr Passwort zurück und benachrichtigen Sie es.| |rememberable |Generiert und löscht Token zum Speichern von Benutzern aus gespeicherten Cookies.| |trackable |Notieren Sie die Anzahl der Anmeldungen, die Anmeldezeit und die IP-Adresse.| |validatable |Bietet eine E-Mail- und Passwortüberprüfung. Sie können auch Ihre eigenen definierten Validierungen hinzufügen.| |confirmable |Wir bieten eine gängige Registrierungsmethode an, z. B. das Klicken auf die URL in der E-Mail, um die Hauptregistrierung abzuschließen. Außerdem wird überprüft, ob das Konto bei der Anmeldung authentifiziert wurde.| |lockable |Wenn Sie sich eine bestimmte Anzahl von Malen nicht anmelden, wird Ihr Konto gesperrt. Es gibt zwei Möglichkeiten, es zu entsperren, z. B. das Entsperren per E-Mail oder nach einer bestimmten Zeit.| |timeoutable |Zerstören Sie die Sitzung des Kontos, das für einen bestimmten Zeitraum nicht aktiv war.| |omniauthable |intridea/Unterstützt Omniauth. Verwenden Sie diese Option, wenn Sie eine Authentifizierung wie Twitter oder Facebook hinzufügen möchten.| Quelle: [* Rails *] Verwendung von devise (Rails6-Version) https://qiita.com/cigalecigales/items/16ce0a9a7e79b9c3974e
Devise erstellt auch Helfer zur Verwendung innerhalb des Controllers und der Ansicht. Häufig verwendete Befehle sind voreingestellt.
Der Name des Helfers wird unter der Annahme dargestellt, dass das Gerätemodell "Benutzer" lautet. Wenn das Gerätemodell kein Benutzer ist, wird durch Ersetzen von "_ user" durch "_ your model (beliebiger Modellname)" dieselbe Logik angewendet.
Dies wird auch zitiert, weil es eine Person gab, die es zu einem Tisch in Qiita gemacht hat.
|Methode|Verwenden| |:-----------------|:----------------| |before_action :authenticate_user!|Stellen Sie den Controller ein, um nur angemeldeten Benutzern Zugriff zu gewähren| |user_signed_in?|Stellen Sie fest, ob der Benutzer angemeldet ist| |current_user|Holen Sie sich den angemeldeten Benutzer| |user_session|Zugriff auf Benutzersitzungsinformationen| Quelle: Liste der in Rails devise verfügbaren Hilfsmethoden https://qiita.com/tobita0000/items/866de191635e6d74e392
Da diese Registrierung für die CRUD des grundlegendsten Kontos verantwortlich ist, scheint es schwierig zu sein, den Code des funktionalen Teils der Anwendung zu lesen, ohne dies zu wissen.
Ich werde den gesamten Code innerhalb des von oben untersuchten Bereichs ausfüllen, aber es kann schwierig sein, ihn zu verstehen, da er in verschiedene Teile unterteilt ist. Es ist vielleicht etwas einfacher zu verstehen, wenn Sie es sich ansehen, während Sie den Quellcode daneben stellen ...
frozen_string_literal
devise/app/controllers/devise/registrations_controller.rb
# frozen_string_literal: true
Obwohl es auskommentiert ist, scheint es ein Satz zu sein, der für das Upgrade der Ruby-Version vorbereitet wurde. Referenz: Das Prinzip des Methodendesigns, das mir bei Frozen_String_Literal aufgefallen ist https://qiita.com/jkr_2255/items/300b5db8c1f04e1e2815
prepend_before_action
devise/app/controllers/devise/registrations_controller.rb
class Devise::RegistrationsController < DeviseController
prepend_before_action :require_no_authentication, only: [:new, :create, :cancel]
prepend_before_action :authenticate_scope!, only: [:edit, :update, :destroy]
prepend_before_action :set_minimum_password_length, only: [:new, :edit]
prepend_before_action
ist eine ** Methode, die vor before_action
** ausgeführt wird. Die Aktionen, auf die zugegriffen werden kann, werden durch den Anmeldestatus des Benutzers eingeschränkt.devise/app/controllers/devise/registrations_controller.rb
# GET /resource/sign_up
def new
build_resource
yield resource if block_given?
respond_with resource
end
resource
ist bereits in devise_controller definiert.devise/app/controllers/devise_controller.rb
def resource
instance_variable_get(:"@#{resource_name}")
end
# Proxy to devise map name
def resource_name
devise_mapping.name
end
alias :scope_name :resource_name
@ user =
.devise_mapping.name
Dies ist auch bereits in devise_controller definiert, aber wenn Sie sich den zitierten Artikel ansehen, scheint es in einem anderen Teil einen Hinweis zu geben.devise/app/controllers/devise_controller.rb
def devise_mapping
@devise_mapping ||= request.env["devise.mapping"]
end
Wenn Sie auf> name achten und den Code verbinden und das Authentifizierungsmodell User ist, wird @singular =: users.to_s.tr ('/', '_') angezeigt. Singularize.to_sym. Singularize ist eine Methode zum Konvertieren einer Pluralform in eine Singularform. Schließlich ist @singular =: user und der Alias von Singular name, sodass Sie Folgendes erhalten können: user mit Mapping.name. Dann: Benutzer wird an das Argument define_methods übergeben und authenticate_user! Ist abgeschlossen.
Quelle: Learn Rails mit Devise Code Reading https://qiita.com/irisAsh/items/513b8b58f54421b9a1a0
Um es einfach auszudrücken: Ist es auf resource_name
gesetzt, da Sie: user
mitapping.name
erhalten können?
devise/app/controllers/devise/registrations_controller.rb
def build_resource(hash = {}) #build_resource(hash = {})Definition von
self.resource = resource_class.new_with_session(hash, session)
end
build
spielt eine ähnliche Rolle wie new
. Die einzelne Anweisung "build_resource" erstellt eine Sitzung mit den Instanzvariablen des Benutzers, die aus der Datenbank abgerufen werden.
--block_given?
Gibt true zurück, wenn der Block beim Ausführen der Methode übergeben wurde, false, wenn er nicht übergeben wurde.Sie können einen Block innerhalb dieser Methode auswerten, indem Sie eine Methode mit einem Code (Block genannt) aufrufen, der in> do ... end oder {...} eingeschlossen ist. Verwenden Sie den Ertragsausdruck, um Ihre eigene Methode mit Blöcken zu definieren. Quelle: Ruby 2.7.0 Referenzhandbuch https://docs.ruby-lang.org/ja/latest/doc/spec=2fcall.html#block
In diesem Fall wird der Ressourcenblock als "Ausbeute" definiert und die Authentizität wird durch "block_given?" Bestätigt. Sie müssen mehr über den Ertrag wissen. --Referenz: @variable ergeben, wenn block_given? Was ist das? https://kossy-web-engineer.hatenablog.com/entry/2020/01/19/094958- --Referenz: [Einführung in Ruby] Zusammenfassung der Verwendung von Yield https://www.sejuku.net/blog/20478
Ich denke, dass "reply_with resource" in Bezug auf diesen Bereich aufgerufen wird.
devise/app/controllers/devise_controller.rb
def respond_with_navigational(*args, &block)
respond_with(*args) do |format|
format.any(*navigational_formats, &block)
end
end
devise/app/controllers/devise_controller.rb
def navigational_formats
@navigational_formats ||= Devise.navigational_formats.select { |format|Mime::EXTENSION_LOOKUP[format.to_s] }
end
Ich bin mir nicht sicher, deshalb möchte ich studieren und Korrekturen vornehmen.
Es ist so kompliziert, Gem ... Ich habe viel aus nur wenigen Codezeilen gelernt. Ich konnte nur neue Aktionen schreiben, aber am Ende möchte ich nur jede Aktion von registrations_controller aufzeichnen ...!
Vielen Dank für Ihre Beziehung.