Beachten Sie, dass ich Schwierigkeiten hatte, die Authentifizierungsfunktion in Rails zu implementieren
Eine Bibliothek zum Implementieren von Authentifizierungsfunktionen in Rails. In ähnlicher Weise ist das Entwickeln eine der Authentifizierungsfunktionen, aber die Zauberei ist einfacher und anpassbarer. Klicken Sie hier, um den Github des Zauberers anzuzeigen
Gemfile
gem 'sorcery'
Terminal
$ bundle install
Terminal
$ rails g sorcery:install
Durch Eingabe des obigen Befehls wird eine Migrationsdatei für das Benutzermodell und die Datenbank generiert.
・ App / models / user.rb
・ Config / initializers / sorcery.rb
・ Db / migrate / yyyymmddhhmmss_sorcery_core.rb
db/migrate/yyyymmddhhmmss_sorcery_core.rb
class SorceryCore < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :name, null: false
t.string :email, null: false
t.string :crypted_password
t.string :salt, null: false
t.timestamps null: false
end
add_index :users, :email, unique: true
end
end
Nehmen wir diesmal an, wir haben Spalten für "Name", "E-Mail" und "Passwort".
――Der Grund für das Auferlegen von Einschränkungen besteht darin, dass das Ausführen von SQL oder das direkte Bearbeiten von Daten zu inkonsistenten Daten führen kann, die vom Modell verboten werden, wenn Sie keine Einschränkungen auf der Datenbankseite festlegen.
add_index: Tabellenname,: Spaltenname, eindeutig: true
Terminal
$ rails db:migrate
app/modeks/user.rb
class User < ApplicationRecord
authenticates_with_sorcery!
validates :name, presence: true, length: { maximum: 255 } #Beschränkungslänge mit Länge
validates :email, presence: true, uniqueness: true #Beschränken Sie die Einzigartigkeit mit der Einzigartigkeit
validates :password, length: { minimum: 3 }, if: -> { new_record? || changes[:crypted_password] }
validates :password, confirmation: true, if: -> { new_record? || changes[:crypted_password] }
validates :password_confirmation, presence: true, if: -> { new_record? || changes[:crypted_password] }
end
Indem Sie "Präsenz: Wahr" schreiben, können Sie verhindern, dass SQL in einem leeren Zustand gespeichert wird, ohne leere Zeichen über den Browser eingeben zu müssen.
Da die Einschränkung "(null: false und add_index: users,: email, unique: true)" auf der Datenbankseite hinzugefügt wurde, Lassen Sie uns auch "(Anwesenheit: wahr oder Eindeutigkeit in Validierungen)" auf der Modellseite einschränken.
if: -> { new_record? || changes[:crypted_password] }
Diese Beschreibung ermöglicht es dem Benutzer, die Eingabe des Kennworts zu unterlassen, wenn er ein anderes Profilelement als das Kennwort aktualisieren möchte.
Terminal
$ rails g controller users new create
app/controllers/users_controller.rb
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to login_path
else
render :new
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
end
ruby:app/views/users/new.html.erb
<%= form_with model: @user, local: true do |f| %>
<div class="form-group">
<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :email %>
<%= f.text_field :email, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :password %>
<%= f.text_field :password, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :password_confirmation %>
<%= f.text_field :password_confirmation, class: 'form-control' %>
</div>
<%= f.submit 'Anmeldung', class: 'btn btn-primary' %>
<% end %>
<div class='text-center'>
<%= link_to 'Gehen Sie zur Anmeldeseite', login_path %>
</div>
Eine Vorlage für die Benutzerregistrierung.
Wie man form_with
benutzt.
Übergeben Sie den eingegebenen Wert an die Instanzvariable @user! Erklärt.
Es kann auch als Benutzerpfad beschrieben werden.
Die hier eingegebenen Daten werden zum Erstellen gesendet.
Der Inhalt des Formulars befindet sich in user_params oder params [: user].
Recommended Posts