[RUBY] J'ai touché le contrôleur de périphérique que j'ai senti dans la boîte noire

introduction

concevoir est un joyau qui facilite la mise en œuvre des fonctions de gestion des utilisateurs. Il y avait de nombreuses parties où je ne comprenais pas «pourquoi ça marche» parce que ça rendait les choses faciles. Je crée une application originale, je veux changer les spécifications, et après beaucoup d'essais et d'erreurs, je sens que j'ai appris à utiliser concevoir plus qu'avant.

contrôleur de conception

La première fois que j'ai découvert la conception, je n'avais pas du tout affaire aux contrôleurs. Pour la conception, le routage a été généré sans autorisation, et le contrôleur n'existait même pas, même si d'autres fonctions ont été implémentées avec le modèle MVC à l'esprit. Depuis que Rails chante le modèle MVC, j'ai appris avec l'idée de "Je me demande s'il y a un contrôleur, mais je me demande s'il disparaît." Quand je vérifie la commande dans le terminal,

rails g --help

=>
Devise:
  devise
  devise:controllers
  devise:install
  devise:views

J'ai remarqué que le dispositif peut générer un contrôleur.

Si vous n'avez pas utilisé le contrôleur de périphérique jusqu'à présent

Le paramètre strong a été défini dans application_controller.rb. Ce fichier est hérité par tous les contrôleurs, il s'applique donc également aux contrôleurs de l'appareil. N'interférez pas avec les contrôleurs autres que les appareils

application_controller.rb


before_action :configure_permitted_parameters, if: :devise_controller?

 private
 def configure_permitted_parameters
   devise_parameter_sanitizer.permit(:sign_up, keys: [:Nom de colonne])
 end

Le paramètre strong n'est traité que lorsque le contrôleur de périphérique est utilisé avec devise_controller?.

Contexte

Dans l'application que j'écris actuellement, je me demande si je peux changer la connexion de l'utilisateur en "nickname" </ font> et "password" au lieu de m'authentifier avec "email address" et "password". C'était.

couler

  1. Générer un contrôleur de périphérique
  2. Modifiez la connexion en authentification arbitraire
  3. Créez des paramètres forts avec le contrôleur de devise
  4. Ajouter une action au routage
  5. Remplacez le fichier de vue par une authentification

1. Générer un contrôleur de périphérique

Au terminal

rails g devise:controllers user

La différence avec la génération des autres contrôleurs est qu'ils sont pluriels en tant que contrôleur s </ font>. Parce que cette commande générera plusieurs contrôleurs en même temps, tels que la connexion et l'inscription.

2. Modifiez la connexion en authentification arbitraire

config/initializwes/devise.rb/Ligne 49


config.authentication_keys = [:nickname]

Décommentez et décrivez la colonne que vous souhaitez utiliser pour toute authentification.

  • Vous pouvez l'utiliser pour l'authentification de connexion sans écrire : password.

3. Créez des paramètres forts avec le contrôleur de devise

app/controllers/user/sessions_controller.rb


class Users::SessionsController < Devise::SessionsController
  before_action :configure_sign_in_params, only: [:create] #Décommenter
(Omission)
protected #Décommenter
# If you have extra params to permit, append them to the sanitizer.
def configure_sign_in_params #Décommenter
    devise_parameter_sanitizer.permit(:sign_in, keys: [:nickname, :password]) #Décommentez et décrivez la colonne que vous souhaitez utiliser pour l'authentification entre crochets * Décrivez également le mot de passe ici
end #Décommenter

4. Ajouter une action au routage

config/routes.rb


devise_for :users, controllers: {sessions: 'users/sessions'}

Ajouté après utilisateurs.

5. Remplacez le fichier de vue par une authentification

ruby:views/devise/sessions/new.html.erb


<%= form_with model: @user, url: user_session_path, class: 'sessions-main', local: true do |f| %>
  <%= f.text_field :nickname, class:"nickname", id:"nickname", placeholder:"surnom" %>
  <%= f.password_field :password, class:"input-default", id:"password", placeholder:"6 caractères alphanumériques demi-largeur ou plus" %>
  <%= f.submit "s'identifier", class:"reg-btn" %>
<% end %>

À tout le moins, ça ressemble à ça ...

finalement

De même, il est possible de modifier les contrôleurs nouvellement enregistrés. Je me demande si je peux remplacer la partie sessions par des inscriptions ...

Recommended Posts