[RUBY] [Procédure d'implémentation] Créer une fonction d'authentification utilisateur à l'aide de sorcellerie dans Rails

Notez que j'ai eu du mal à implémenter la fonction d'authentification dans Rails

Environnement de travail

Qu'est-ce que la sorcellerie

Une bibliothèque pour implémenter des fonctions d'authentification dans Rails. De même, concevoir est l'une des fonctions d'authentification, mais la sorcellerie est plus simple et plus personnalisable. Cliquez ici pour le github du sorcier

Procédure de montage

installation de sorcellerie

Gemfile


gem 'sorcery'

Terminal


$ bundle install

Générer le modèle utilisateur et le fichier de migration

Terminal


$ rails g sorcery:install

En tapant la commande ci-dessus, un fichier de migration pour le modèle utilisateur et la base de données sera généré. ・ App / modèles / user.rbConfig / initialiseurs / sorcery.rbDb / migrate / yyyymmddhhmmss_sorcery_core.rb

Contraindre la base de données

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

Cette fois, supposons que nous ayons des colonnes pour name, email et password.

――La raison de mettre des restrictions est que si vous ne mettez pas de restrictions du côté de la base de données, l'exécution de SQL ou la manipulation directe des données peut entraîner des données incohérentes interdites par le modèle.

--Ajoutez à add_index pour les éléments que vous souhaitez rendre unicité: true dans le modèle. La méthode de description de add_index est la suivante. add_index: nom de la table ,: nom de la colonne, unique: vrai

Terminal


$ rails db:migrate

--Une fois que vous avez décrit les restrictions de migration, générez la table des utilisateurs avec la commande ci-dessus.

Contraindre le modèle utilisateur

app/modeks/user.rb


class User < ApplicationRecord
  authenticates_with_sorcery!
  validates :name, presence: true, length: { maximum: 255 } #Longueur de contrainte avec longueur
  validates :email, presence: true, uniqueness: true #Contraindre l'unicité avec l'unicité
  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

--Depuis que la contrainte (null: false et add_index: users ,: email, unique: true) a été ajoutée côté base de données, Contraignons également (présence: vrai ou unicité dans les validations) côté modèle.

Générer le contrôleur des utilisateurs

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

Génération de l'écran d'enregistrement des utilisateurs (nouvel enregistrement)

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 'enregistrement', class: 'btn btn-primary' %>
<% end %>
<div class='text-center'>
  <%= link_to 'Aller à la page de connexion', login_path %>
</div>

--Comment utiliser form_with. Transmettez la valeur saisie à la variable d'instance @user! Déclaré. Il peut également être décrit comme users_path. Les données saisies ici sont envoyées pour créer. Le contenu du formulaire est dans user_params ou params [: user].

Recommended Posts

[Procédure d'implémentation] Créer une fonction d'authentification utilisateur à l'aide de sorcellerie dans Rails
Créer une fonction d'authentification dans l'application Rails à l'aide de devise
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)
Créez un écran d'authentification de connexion à l'aide de la fonction de session
Ajoutez une fonction de recherche dans Rails.
[Rails] Implémentation de la fonction de retrait utilisateur
Créer une nouvelle application avec Rails
Créer une fonction de filtrage en utilisant actes-as-taggable-on
[Rails] Commentaire mémo de procédure d'implémentation
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
[Retrait des rails] Créez une fonction de retrait simple avec des rails
Échafaudage de procédure d'implémentation de fonction CRUD de base
Créez une fonction de connexion à l'aide de l'option Swift
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
[Rails] Je vais expliquer la procédure d'implémentation de la fonction follow en utilisant form_with.
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
Mettre en œuvre la fonction de classement par étoiles en utilisant Raty dans Rails 6
[Rails] J'ai créé une fonction de brouillon en utilisant enum
Comment créer facilement un pull-down avec des rails
[Pour les débutants] Procédure de création d'un contrôleur à l'aide de rails
Créez une API de tableau d'affichage avec certification et autorisation dans Rails 6 # 6 show, créez une implémentation
Construire une API de tableau d'affichage avec certification et autorisation dans le contrôleur Rails 6 # 5, implémentation des routes
Un mémo pour créer un formulaire simple en utilisant uniquement HTML et CSS dans Rails 6
Créez un éditeur de démarques par glisser-déposer dans Rails 6 (à l'aide d'Active Storage, SimpleMDE et Inline Attachment)
[rails] gem'payjp'implementation procedure
Créer un site EC avec Rails 5 ⑨ ~ Créer une fonction de panier ~
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Préparation"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "seed edition"
Je souhaite définir une fonction dans la console Rails
Construire une API de tableau d'affichage avec certification et autorisation avec Rails 6 # 18 ・ Implémentation du contrôleur de l'utilisateur final
Créer une API de tableau d'affichage avec autorisation dans Rails 6 # 12 Association d'utilisateur et de publication
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "Formulaire de création"
[Rails DM] Créons une fonction de notification lorsque DM est envoyé!
Mise en place de la fonction de tri des rails (affichés par ordre de nombre de like)
Créer un projet Tomcat en utilisant Eclipse Pleiades All in One
Implémenter la fonction d'enregistrement des utilisateurs et la fonction d'enregistrement de l'entreprise séparément dans Rails concevoir
Implémenter la fonction d'application dans Rails
Implémentation de la fonction de recherche floue Rails
[Rails] Implémenter la fonction de recherche d'utilisateurs
Fonction de recherche à l'aide de [rails] ransack
Authentification SNS à l'aide de Rails google
Japaneseize en utilisant i18n avec Rails