[RUBY] Erstellen Sie die Authentifizierungsfunktion in der Rails-Anwendung mit devise

Einführung

――Dieses Mal möchte ich für meine eigene Studie organisieren, wie die Rails-Anwendung mithilfe von Geräten eine Authentifizierungsfunktion hinzugefügt wird. Der Inhalt entspricht fast dem von diesem Artikel. Xie Xie

Umgebung

Gerät installieren

1. Bearbeiten Sie Gemfile

# Devise
gem 'devise'

2.bundle install

$bundle install

Einstellungen vornehmen

1. Führen Sie den folgenden Befehl aus

$ rails g devise:install
      create  config/initializers/devise.rb
      create  config/locales/devise.en.yml
===============================================================================

Depending on your application's configuration some manual setup may be required:

  1. Ensure you have defined default url options in your environments files. Here
     is an example of default_url_options appropriate for a development environment
     in config/environments/development.rb:

       config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

     In production, :host should be set to the actual host of your application.

     * Required for all applications. *

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:

       root to: "home#index"
     
     * Not required for API-only Applications *

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
     For example:

       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>

     * Not required for API-only Applications *

  4. You can copy Devise views (for customization) to your app by running:

       rails g devise:views
       
     * Not required *

===============================================================================

Legen Sie die Standard-URL fest

config/development.rb


Rails.application.configure do
  ~~Unterlassung~~
  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
end

Erstellen Sie eine Stammseite

Sie können dies überspringen und eine beliebige Seite als Stammseite festlegen.


$rails g controller StaticPages index

route.rb


Rails.application.routes.draw do
  root 'static_pages#index'
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end

Flash-Nachricht einstellen

Bearbeiten Sie app / views / layouts / application.html.erb

<!DOCTYPE html>
<html> 
 <head>
  <title>DeviseRails5</title>
  <%= csrf_meta_tags %>

  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
 </head>
 <body>
  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>

  <%= yield %>

 </body> 
</html>

Erstellen Sie eine Entwurfsansicht

$ rails g devise:views
invoke  Devise::Generators::SharedViewsGenerator
create    app/views/devise/shared
create    app/views/devise/shared/_error_messages.html.erb
create    app/views/devise/shared/_links.html.erb
invoke  form_for
create    app/views/devise/confirmations
create    app/views/devise/confirmations/new.html.erb
create    app/views/devise/passwords
create    app/views/devise/passwords/edit.html.erb
create    app/views/devise/passwords/new.html.erb
create    app/views/devise/registrations
create    app/views/devise/registrations/edit.html.erb
create    app/views/devise/registrations/new.html.erb
create    app/views/devise/sessions
create    app/views/devise/sessions/new.html.erb
create    app/views/devise/unlocks
create    app/views/devise/unlocks/new.html.erb
invoke  erb
create    app/views/devise/mailer
create    app/views/devise/mailer/confirmation_instructions.html.erb
create    app/views/devise/mailer/email_changed.html.erb
create    app/views/devise/mailer/password_change.html.erb
create    app/views/devise/mailer/reset_password_instructions.html.erb
create    app/views/devise/mailer/unlock_instructions.html.erb

Benutzermodell erstellen

rails g devise User

Der obige Befehl generiert die folgende Migrationsdatei.

db/migrate/20200622180124_devise_create_users.rb


# frozen_string_literal: true

class DeviseCreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      # t.integer  :sign_in_count, default: 0, null: false
      # t.datetime :current_sign_in_at
      # t.datetime :last_sign_in_at
      # t.inet     :current_sign_in_ip
      # t.inet     :last_sign_in_ip

      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at


      t.timestamps null: false
    end

    add_index :users, :email,                unique: true
    add_index :users, :reset_password_token, unique: true
    # add_index :users, :confirmation_token,   unique: true
    # add_index :users, :unlock_token,         unique: true
  end
end

Es scheint, dass database_authenticatable, registerable, wiederherstellbar, erinnerbar, validierbar standardmäßig aktiviert sind.

app/models/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
end

Dieses Mal erstellen wir es mit den Standardeinstellungen, aber Sie können optional jedes der 10 Module aktivieren.

Modul   Überblick                                                       
Database Authenticatable Hash das Passwort und speichere es in der Datenbank, um die Authentizität des Benutzers während der Anmeldung zu überprüfen. Die Authentifizierung kann sowohl mit POST-Anforderungen als auch mit der HTTP-Basisauthentifizierung erfolgen.
Omniauthable OmniAuth(https://github.com/omniauth/omniauth)Unterstützung hinzufügen.
Confirmable Senden Sie eine E-Mail mit Anweisungen zur Überprüfung, um festzustellen, ob Ihr Konto bei der Anmeldung bereits überprüft wurde.
Recoverable Setzen Sie das Passwort des Benutzers zurück und senden Sie eine Anweisung zum Zurücksetzen.
Registerable Verarbeiten Sie die Benutzeranmeldung über den Registrierungsprozess, sodass Benutzer ihr Konto bearbeiten und zerstören können.
Rememberable Verwaltet das Generieren und Löschen von Token, um Benutzer an gespeicherte Cookies zu erinnern.
Trackable Verfolgen Sie Anmeldungen, Zeitstempel und IP-Adressen..
Timeoutable Läuft Sitzungen ab, die für den angegebenen Zeitraum inaktiv waren.
Validatable Bietet eine E-Mail- und Passwortüberprüfung. Dies ist optional und anpassbar, sodass Sie Ihre eigene Validierung definieren können.
Lockable Sperrt das Konto nach der angegebenen Anzahl fehlgeschlagener Anmeldeversuche. Kann per E-Mail oder nach einem bestimmten Zeitraum entsperrt werden

Führen Sie eine Migration durch

$ rake db:migrate

Ansicht bearbeiten

Header hinzufügen

app/views/layouts/application.html.erb

<!DOCTYPE html>
<html> 
 <head>
  <title>DeviseSampleApp</title>
  <%= csrf_meta_tags %>

  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
 </head>
 <body>
 <header>
    <nav>
        <% if user_signed_in? %>
        <%= link_to 'Profiländerung', edit_user_registration_path %>
        <%= link_to 'Ausloggen', destroy_user_session_path, method: :delete %>
    <% else %>
        <%= link_to 'Anmelden', new_user_registration_path %>
        <%= link_to 'Einloggen', new_user_session_path %>
        <% end %>
    </nav>
  </header>
  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>

  <%= yield %>

 </body> 
</html>

――Wenn Sie auf die Startseite zugreifen, wird ein Bildschirm wie dieser generiert. スクリーンショット 2020-06-23 3.48.36.png

--Klicken Sie auf Anmelden スクリーンショット 2020-06-23 3.34.51.png

――Wenn ich mich angemeldet und meine E-Mail-Adresse und mein Passwort eingegeben habe, konnte ich mich erfolgreich anmelden! スクリーンショット 2020-06-23 3.35.29.png

Andere

Hilfsmethode von devise

user_signed_in?

Sie können überprüfen, ob der Benutzer angemeldet ist.

current_user

Sie können auf den angemeldeten Benutzer zugreifen.

user_session

Sie können auf die Sitzung zugreifen.

Ändern Sie das Umleitungsziel nach der Anmeldung

app/controllers/application_controller.rb


class ApplicationController < ActionController::Base
  def after_sign_up_path_for(resource)
    edit_user_registration_path #Sie können hier bearbeiten und zu einer beliebigen Seite springen
  end
end

Nach der Anmeldung werde ich nun auf die folgende Seite weitergeleitet.

スクリーンショット 2020-06-23 3.34.18.png

Ändern Sie das Umleitungsziel nach der Anmeldung

app/controllers/application_controller.rb


class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
    edit_user_registration_path #Sie können hier bearbeiten und zu einer beliebigen Seite springen
  end
end

Rückruffunktion

(Ich bin mir hier nicht sicher)

Verweise

Recommended Posts

Erstellen Sie die Authentifizierungsfunktion in der Rails-Anwendung mit devise
[Implementierungsverfahren] Erstellen Sie eine Benutzerauthentifizierungsfunktion mithilfe von Hexerei in Rails
Implementieren Sie die Anwendungsfunktion in Rails
[Rails] Funktionseinschränkungen im Gerät (Login / Logout)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (2)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (3)
[Rails] Implementierung einer neuen Registrierungsfunktion im Assistentenformat mit devise
Nuxt.js × Erstellen Sie eine Anwendung im Rails-API-Modus
Implementieren Sie die Sternebewertungsfunktion mit Raty in Rails 6
[Rails] Erstellen Sie eine Anwendung
Implementieren Sie die Nachsuchfunktion in der Rails-Anwendung (where-Methode).
Erstellen Sie mit der Sitzungsfunktion einen Anmeldeauthentifizierungsbildschirm
Suchfunktion mit [Rails] Ransack
SNS-Authentifizierung mit Rails Google
Japanisieren Sie mit i18n mit Rails
Implementieren Sie die LTI-Authentifizierung in Rails
Implementieren Sie die Benutzerregistrierungsfunktion und die Unternehmensregistrierungsfunktion separat in Rails devise
[Rails] Implementieren Sie die Funktion zur Beantragung / Genehmigung einer Community-Mitgliedschaft mithilfe von Many-to-Many-Zuordnungen
[Rails] Einstellung des Sitzungszeitlimits im Gerät
Fügen Sie eine Suchfunktion in Rails hinzu.
Vorbereiten der Erstellung einer Rails-Anwendung
[Rails] Implementierung des Anmeldebildschirms in Devise
[Rails] Tag-Verwaltungsfunktion (unter Verwendung von Acts-as-Taggable-On)
[Rails] Unerwarteter Validierungsfehler im Gerät
Implementieren Sie eine einfache Anmeldefunktion in Rails
Erstellen Sie eine neue App mit Rails
Erstellen Sie eine Filterfunktion mit Acts-as-Taggable-On
Erstellen Sie meine Seite mit Rails
Implementieren Sie die CSV-Download-Funktion in Rails
Lassen Sie uns eine TODO-App in Java 4 erstellen. Implementierung der Buchungsfunktion
Lassen Sie uns eine TODO-App in Java 6 erstellen. Implementierung der Suchfunktion
Lassen Sie uns eine TODO-App in Java 8 erstellen. Implementierung von Bearbeitungsfunktionen
So erstellen Sie eine Abfrage mithilfe von Variablen in GraphQL [Verwenden von Ruby on Rails]
Authentifizierungsfunktion mit Play Framework [Zugriffsbeschränkungen]
[Schienenentnahme] Erstellen Sie eine einfache Entnahmefunktion mit Schienen
ERRORCODE = -4471 tritt in einer Java-Anwendung auf, die Db2 verwendet.
[Rails 6] Registrieren und Anmelden mit Devise + SNS-Authentifizierung (mehrere Links zulässig)
[Schienen] erfinden
Anfänger haben mit Ruby on Rails ein Portfolio erstellt
Implementieren Sie Schaltflächenübergänge mit link_to in Rails
Erstellen Sie eine Anmeldefunktion mit Swift's Optional
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 6. Zeigen Sie, erstellen Sie die Implementierung
Ein Memo zum Erstellen eines einfachen Formulars, das nur HTML und CSS in Rails 6 verwendet