[RUBY] Créer une fonction d'authentification dans l'application Rails à l'aide de devise

introduction

――Cette fois, pour ma propre étude, je voudrais organiser comment ajouter une fonction d'authentification à l'application Rails à l'aide de devise. Le contenu est presque le même que cet article. Xie Xie

environnement

installer le dispositif

1. Modifier Gemfile

# Devise
gem 'devise'

2.bundle install

$bundle install

définir les paramètres

1. Exécutez la commande suivante

$ 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 *

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

Définir l'URL par défaut

config/development.rb


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

Créer une page racine

Vous pouvez ignorer cela et définir n'importe quelle page comme page racine.


$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

Définir le message flash

Modifier 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>

Créer une vue de devise

$ 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

Créer un modèle utilisateur

rails g devise User

La commande ci-dessus générera le fichier de migration suivant.

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

Il semble que database_authenticatable, enregistrable, récupérable, mémorisable, validable soient activés par défaut.

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

Cette fois, nous le créerons avec les paramètres par défaut, mais vous pouvez éventuellement activer l'un des 10 modules.

module   Aperçu                                                       
Database Authenticatable Hachez le mot de passe et stockez-le dans la base de données pour vérifier l'authenticité de l'utilisateur lors de la connexion. L'authentification peut être effectuée à la fois avec des requêtes POST ou avec une authentification de base HTTP.
Omniauthable OmniAuth(https://github.com/omniauth/omniauth)Ajoutez du support.
Confirmable Envoyez un e-mail avec des instructions de vérification pour voir si votre compte a déjà été vérifié lors de la connexion.
Recoverable Réinitialisez le mot de passe de l'utilisateur et envoyez une instruction de réinitialisation.
Registerable Traiter l'inscription des utilisateurs tout au long du processus d'inscription, permettant aux utilisateurs de modifier et de détruire leur compte.
Rememberable Gère la génération et l'effacement des jetons pour mémoriser les utilisateurs des cookies stockés.
Trackable Gardez une trace des connexions, des horodatages et des adresses IP..
Timeoutable Expire les sessions qui ont été inactives pendant la période spécifiée.
Validatable Fournit une vérification des e-mails et des mots de passe. Ceci est facultatif et personnalisable afin que vous puissiez définir votre propre validation.
Lockable Verrouille le compte après le nombre spécifié d'échecs de tentatives de connexion. Peut être déverrouillé par e-mail ou après une période de temps spécifiée

Effectuer une migration

$ rake db:migrate

Modifier vue

Ajouter un en-tête

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 'Changement de profil', edit_user_registration_path %>
        <%= link_to 'Se déconnecter', destroy_user_session_path, method: :delete %>
    <% else %>
        <%= link_to 'S'inscrire', new_user_registration_path %>
        <%= link_to 'S'identifier', new_user_session_path %>
        <% end %>
    </nav>
  </header>
  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>

  <%= yield %>

 </body> 
</html>

――Lorsque vous accédez à la page d'accueil, un écran comme celui-ci est généré. スクリーンショット 2020-06-23 3.48.36.png

--Cliquez sur inscription スクリーンショット 2020-06-23 3.34.51.png

――Lorsque je me suis inscrit et que j'ai entré mon adresse e-mail et mon mot de passe, j'ai pu me connecter avec succès! スクリーンショット 2020-06-23 3.35.29.png

Autre

Méthode d'assistance fournie par devise

user_signed_in?

Vous pouvez vérifier si l'utilisateur est connecté.

current_user

Vous pouvez accéder à l'utilisateur connecté.

user_session

Vous pouvez accéder à la session.

Changer la destination de la redirection après l'inscription

app/controllers/application_controller.rb


class ApplicationController < ActionController::Base
  def after_sign_up_path_for(resource)
    edit_user_registration_path #Vous pouvez modifier ici et accéder à n'importe quelle page
  end
end

Après m'être inscrit, je suis maintenant redirigé vers la page suivante.

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

Changer la destination de la redirection après la connexion

app/controllers/application_controller.rb


class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
    edit_user_registration_path #Vous pouvez modifier ici et accéder à n'importe quelle page
  end
end

Fonction de rappel

(Je ne sais pas exactement ici)

--Il semble que after_fetch soit le seul callback qui conçoit des appels (source requise), donc si vous voulez appeler d'autres callbacks, utilisez interface de gardien. Doit être appelé directement.

Les références

Recommended Posts

Créer une fonction d'authentification dans l'application Rails à l'aide de devise
[Procédure d'implémentation] Créer une fonction d'authentification utilisateur à l'aide de sorcellerie dans Rails
Implémenter la fonction d'application dans Rails
[Rails] Restrictions de fonction dans l'appareil (connexion / déconnexion)
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (2)
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (3)
[Rails] Implémentation d'une nouvelle fonction d'enregistrement au format assistant à l'aide de devise
Nuxt.js × Créer une application en mode API Rails
Mettre en œuvre la fonction de classement par étoiles en utilisant Raty dans Rails 6
[Rails] Créer une application
Implémenter la fonction de recherche de publication dans l'application Rails (méthode where)
Créez un écran d'authentification de connexion à l'aide de la fonction de session
Fonction de recherche à l'aide de [rails] ransack
Authentification SNS à l'aide de Rails google
Japaneseize en utilisant i18n avec Rails
Implémenter l'authentification LTI dans Rails
Implémenter la fonction d'enregistrement des utilisateurs et la fonction d'enregistrement de l'entreprise séparément dans Rails concevoir
[Rails] Implémentation d'une fonction de demande / d'approbation d'adhésion à la communauté à l'aide d'associations plusieurs-à-plusieurs
[Rails] Paramètre de délai d'expiration de session dans l'appareil
Ajoutez une fonction de recherche dans Rails.
Préparation à la création de l'application Rails
[rails] Implémentation de l'écran de connexion dans la devise
[Rails] Fonction de gestion des balises (en utilisant des actes comme des balises)
[Rails] Erreur de validation inattendue dans l'appareil
Créer une fonction de pagination avec Rails Kaminari
Implémenter une fonction de connexion simple dans Rails
Créer une nouvelle application avec Rails
Créer une fonction de filtrage en utilisant actes-as-taggable-on
Créer ma page avec Rails
Implémenter la fonction de téléchargement CSV dans Rails
Créons une application TODO en Java 4 Implémentation de la fonction de publication
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
Créons une application TODO en Java 8 Implémentation des fonctions d'édition
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
Fonction d'authentification avec Play Framework [Restrictions d'accès]
[Retrait des rails] Créez une fonction de retrait simple avec des rails
ERRORCODE = -4471 se produit dans une application Java qui utilise Db2.
[Rails 6] Enregistrez-vous et connectez-vous avec l'authentification Devise + SNS (plusieurs liens sont autorisés)
[Rails] concevoir
Débutant a créé un portfolio avec Ruby on Rails
Implémenter des transitions de boutons à l'aide de link_to dans Rails
Créez une fonction de connexion à l'aide de l'option Swift
Créez une API de tableau d'affichage avec certification et autorisation dans Rails 6 # 6 show, créez une implémentation
Un mémo pour créer un formulaire simple en utilisant uniquement HTML et CSS dans Rails 6