[Ruby on Rails] Comment se connecter avec seulement votre nom et mot de passe en utilisant le bijou

Cible

画面収録 2020-09-01 22.17.23.mov.gif

Environnement de développement

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina

supposition

Créé un contrôleur domestique et décrit ce qui suit.

config/routes.rb


root 'homes#top'
get 'mypage', to: 'homes#mypage'

app/controllers/homes_controller.rb


class HomesController < ApplicationController
 def top
 end
 def mypage
 end
end

1, installer le dispositif

Ajoutez ce qui suit à la fin du Gemfile.

Gemfile



gem 'devise'

Après l'enregistrement, accédez au terminal et exécutez ce qui suit.

Terminal


$ bundle install

Terminal


$ rails g devise:install

<détails> <résumé> Explication </ résumé> rails g devise: install effectue la configuration initiale du dispositif. </ détails>

C'est OK si l'affichage suivant est affiché.

Terminal


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

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 *

===============================================================================
En cas d'erreur Si vous voyez une erreur, il s'agit probablement d'une erreur due à une mise à jour de Rails. Passez en revue le gem'sqlite3 'dans le Gemfile.

2, affichez l'écran de connexion

Créer une table (ajouter un nom)

Contrairement à la description habituelle, Décrit comme "rails g nom de modèle de conception", qui est une règle unique de conception. Cette fois, pour créer un modèle utilisateur, exécutez ce qui suit sur le terminal.

Terminal


$ rails g devise User

Décrivez t.string: nom dans le dossier suivant.

db/migrate/xxxxxxxxxxxxx_devise_create_users.rb


...

      t.string :name  #← Ajouter ici
      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

<détails>

Supplément 1 </ summary> En écrivant null: false, vous pouvez empêcher l'enregistrement dans un état vide. À propos de null: false here </ details>

<détails>

Supplément 2 </ summary> Si vous souhaitez ajouter des informations d'enregistrement autres que votre nom, Possible en écrivant de la même manière que t.string: name. ex) t.string: numéro_téléphone etc. </ détails>

Accédez ensuite au terminal et procédez comme suit:

Terminal


$ rails db:migrate

C'est OK si l'affichage suivant est affiché.

Terminal


== 20200901103907 DeviseCreateUsers: migrating ================================
-- create_table(:users)
   -> 0.0038s
-- add_index(:users, :email, {:unique=>true})
   -> 0.0013s
-- add_index(:users, :reset_password_token, {:unique=>true})
   -> 0.0013s
== 20200901103907 DeviseCreateUsers: migrated (0.0067s) =======================

Créer une vue (ajouter un nom)

Terminal


$ rails g devise:views users

<détails> <résumé> Explication </ résumé> rails g devise: affiche les utilisateurs Les vues de conception peuvent être stockées dans les applications / vues / utilisateurs Vous pouvez également modifier les vues. </ détails>

Décrivez ce qui suit dans <% = form_for%> sur la troisième ligne.

erb:app/views/devise/registrations/new.html.erb


...

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name, autofocus: true, autocomplete: "name" %>
  </div>

...

Remplacez les 3 e-mails suivants par name et email_field par text_field

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


  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
  </div>
  
  ↓

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name, autofocus: true, autocomplete: "name" %>
  </div>

Décommentez la description suivante à la ligne 49 et remplacez [: email] par [: name]

config/initializers/devise.rb



config.authentication_keys = [:name]

Voir avant de se connecter

erb:app/views/homes/top.html.erb


<%= link_to 's'inscrire', new_user_registration_path %><br>
<%= link_to 'S'identifier', new_user_session_path %>

Voir après connexion

erb:app/views/homes/mypage.html.erb


<%= current_user.name %><br>
<%= current_user.email %><br>
<%= link_to 'Se déconnecter', destroy_user_session_path, method: :delete %>

<détails> <résumé> Explication </ résumé> current_user est une méthode d'aide à la conception et peut obtenir des informations sur l'utilisateur lors de la connexion. Au moment de la déconnexion, bien qu'il n'y ait pas de couverture avec la méthode http, Il est sûr de spécifier method :: delete. </ détails>

3, créer un contrôleur

Terminal


$ rails g devise:controllers users

Décommentez les lignes 4, 44-46, 54-56, Changé: attribut à la ligne 45 en: nom ,: email. Changez le chemin où vous voulez ignorer super (ressource) sur la 55e ligne.

app/controllers/users/registrations_controller.rb


# frozen_string_literal: true

class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]
  # before_action :configure_account_update_params, only: [:update]

...

  # protected

  # If you have extra params to permit, append them to the sanitizer.
  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :email])
  end

  # If you have extra params to permit, append them to the sanitizer.
  # def configure_account_update_params
  #   devise_parameter_sanitizer.permit(:account_update, keys: [:attribute])
  # end

  # The path used after sign up.
  def after_sign_up_path_for(resource)
    mypage_path
  end

  # The path used after sign up for inactive accounts.
  # def after_inactive_sign_up_path_for(resource)
  #   super(resource)
  # end
end

<détails> <résumé> Explication </ résumé> Spécifiez l'autorisation de sauvegarde de colonne lors de l'inscription en tant que nouveau membre aux lignes 44 à 46. Spécifiez la destination de transition après l'enregistrement d'un nouveau membre sur les 55e à 56e lignes. </ détails>

Supplement La destination de la transition après la mise à jour des informations sur les membres peut également être modifiée comme décrit ci-dessus. La description est correcte sur la 57e ligne ou moins.  def after_update_path_for(resource)   mypage_path  end

Ajouté sous la ligne 27.

app/controllers/users/sessions_controller.rb


...

  def after_sign_in_path_for(resource)
    mypage_path
  end

  def after_sign_out_path_for(resource)
    root_path
  end
end

<détails> <résumé> Explication </ résumé> Spécifiez la destination de la transition lors de la connexion et de la déconnexion. </ détails>

devise_for: utilisateurs Description supplémentaire ci-dessous.

config/routes.rb


Rails.application.routes.draw do
  devise_for :users, controllers: {
    sessions: 'users/sessions',
    registrations: 'users/registrations',
  }
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html

  root 'homes#top'
  get 'mypage', to: 'homes#mypage'
end

Recommended Posts