Nous avons résumé comment implémenter la fonctionnalité de gestion des utilisateurs dans Rails à l'aide de gem design.
Commencez par ajouter devise au fichier gem.
gemfile
gem 'devise'
Exécutez l'installation groupée ** et redémarrez le serveur. ** **
Créez ensuite un fichier de configuration de périphérique.
$ rails g devise:install
Créez un modèle utilisateur.
rails g devise user
À ce stade, le fichier de migration est généré en même temps que le modèle utilisateur, donc s'il y a une colonne à ajouter, décrivez-la avant de migrer.
○○_devise_create_users.rb
--réduction--
class DeviseCreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :nickname, null: false, default: ""
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
t.string :family_name, null: false, default: ""
t.string :first_name, null: false, default: ""
t.string :read_family, null: false, default: ""
t.string :read_first, null: false, default: ""
t.date :birth, null: false
--réduction--
L'email et le mot de passe doivent être joints par défaut, donc cette fois j'ai créé pour ajouter d'autres colonnes.
En passant, j'utilise le type de date lors de la préparation de la colonne de date de naissance, mais comme la valeur par défaut ne peut être définie qu'avec une constante, je n'ai pas défini la valeur par défaut cette fois.
Migrez lorsque vous êtes prêt.
$ rails db:migrate
Tout ce que vous avez à faire est de préparer le fichier de vue et vous êtes prêt à commencer.
Afin d'enregistrer des informations autres que l'adresse e-mail et le mot de passe lorsque l'utilisateur s'inscrit, il est nécessaire de les décrire dans application_controller.
application_controller.rb
class ApplicationController < ActionController::Base
before_action :authenticate_user!, except: [:index]
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :family_name, :email, :first_name, :read_family, :read_first, :birth])
end
end
Si vous passez à une page autre que lorsque vous êtes sur la page d'index, vous pouvez vous forcer à accéder à la page de connexion. J'ai écrit la méthode before_action: authenticate_user !.
Pour enregistrer des paramètres supplémentaires Before_action: écrivez la méthode configure_permitted_parameters.
Assurez-vous également de transmettre les variables d'instance de modèle et les chemins à la méthode form_with du fichier de vue.
ruby:views/devise/registrations/new.html.erb
---réduction---
<%= form_with class: 'registration-main', model: @user, url: user_registration_path, local: true do |f| %>
---réduction---
ruby:views/devise/sessions/new.html.erb
---réduction---
<%= form_with class: 'registration-main',model: @user, url: user_session_path, local: true do |f| %>
---réduction---
Sans cela, cela ne fonctionnerait pas bien avec la table des utilisateurs.
Ici, implémentons un bouton de déconnexion dans le fichier de vue avec la méthode link_to. Le point est de ne pas oublier d'écrire le chemin pour déconnecter la session utilisateur.
ruby:xxx.html.erb
<li><%= link_to 'Se déconnecter', destroy_user_session_path, method: :delete, class: "logout" %></li>
Lorsque vous êtes connecté, un bouton pour passer à Ma page et un bouton pour vous déconnecter s'affichent sur la page, Je vais également résumer la description afin que le nouveau bouton d'inscription et le bouton de connexion s'affichent lorsque vous n'êtes pas connecté (lorsque vous êtes un invité).
Utilisons la méthode user_signed_in? De la méthode helper. Écrivez ce qui suit dans le fichier de vue correspondant.
ruby:views/xxx.html.erb
<% if user_signed_in? %>
<li><%= link_to current_user.nickname, root_path, class: "user-nickname" %></li>
<li><%= link_to 'Se déconnecter', destroy_user_session_path, method: :delete, class: "logout" %></li>
<% else %>
<li><%= link_to 'S'identifier', new_user_session_path, class: "login" %></li>
<li><%= link_to 's'inscrire', new_user_registration_path, class: "sign-up" %></li>
<% end %>