[Ruby on Rails] So melden Sie sich nur mit Ihrem Namen und Passwort mit dem Gem-Gerät an

Ziel

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

Entwicklungsumgebung

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina

Annahme

Erstellt einen Heimcontroller und beschreibt Folgendes.

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, installieren Sie Gerät

Fügen Sie am Ende der Gemfile Folgendes hinzu.

Gemfile



gem 'devise'

Gehen Sie nach dem Speichern zum Terminal und führen Sie die folgenden Schritte aus.

Terminal


$ bundle install

Terminal


$ rails g devise:install
Erläuterung Rails g Devise: Install führt die Ersteinrichtung von Devise durch.

Es ist in Ordnung, wenn die folgende Anzeige angezeigt wird.

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 *

===============================================================================
Bei Fehler Wenn Sie einen Fehler sehen, handelt es sich höchstwahrscheinlich um einen Fehler aufgrund eines Rails-Updates. Überprüfen Sie das gem'sqlite3 'in der Gemfile.

2, zeigen Sie den Anmeldebildschirm an

Tabelle erstellen (Name hinzufügen)

Im Gegensatz zur üblichen Beschreibung Beschrieben als "Rails g Devise Model Name", was eine einzigartige Regel für die Entwicklung ist. Führen Sie dieses Mal Folgendes auf dem Terminal aus, um ein Benutzermodell zu erstellen.

Terminal


$ rails g devise User

Beschreiben Sie t.string: name im folgenden Ordner.

db/migrate/xxxxxxxxxxxxx_devise_create_users.rb


...

      t.string :name  #← Hier hinzufügen
      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

Ergänzung 1 Wenn Sie null: false schreiben, können Sie das Speichern in einem leeren Zustand verhindern. Über null: false [hier](https://qiita.com/ryuuuuuuuuu/items/2841cddf8b541c336ebd)
Supplement 2 Wenn Sie andere Registrierungsinformationen als Ihren Namen hinzufügen möchten, Möglich durch Schreiben auf die gleiche Weise wie t.string: name. ex) t.string: Telefonnummer usw.

Gehen Sie dann zum Terminal und gehen Sie wie folgt vor:

Terminal


$ rails db:migrate

Es ist in Ordnung, wenn die folgende Anzeige angezeigt wird.

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) =======================

Ansicht erstellen (Name hinzufügen)

Terminal


$ rails g devise:views users
Erläuterung Schienen g Gerät: Ansichten Benutzer Entwicklungsansichten können in App / Ansichten / Benutzer gespeichert werden. Sie können auch Ansichten bearbeiten.

Beschreiben Sie Folgendes in <% = form_for%> in der 3. Zeile.

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


...

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

...

Ändern Sie die folgenden 3 E-Mails in name und email_field in 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>

Kommentieren Sie die folgende Beschreibung in der Nähe von Zeile 49 aus und ändern Sie [: email] in [: name].

config/initializers/devise.rb



config.authentication_keys = [:name]

Vor dem Anmelden anzeigen

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


<%= link_to 'Anmelden', new_user_registration_path %><br>
<%= link_to 'Einloggen', new_user_session_path %>

Nach dem Login anzeigen

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


<%= current_user.name %><br>
<%= current_user.email %><br>
<%= link_to 'Ausloggen', destroy_user_session_path, method: :delete %>
Erläuterung current_user ist eine Hilfsmethode und kann Benutzerinformationen während der Anmeldung abrufen. Zum Zeitpunkt der Abmeldung gibt es zwar keine Abdeckung mit der http-Methode, Es ist sicher, method :: delete anzugeben.

3, Controller erstellen

Terminal


$ rails g devise:controllers users

Kommentarzeilen 4, 44-46, 54-56, Geändert: Attribut in Zeile 45 in: Name,: E-Mail. Ändern Sie den Pfad, in dem Sie in der 55. Zeile Super (Ressource) überspringen möchten.

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

Erläuterung Geben Sie die Berechtigung zum Speichern von Spalten an, wenn Sie sich in den Zeilen 44 bis 46 als neues Mitglied registrieren. Geben Sie das Übergangsziel nach der Registrierung eines neuen Mitglieds in der 55. bis 56. Zeile an.
Supplement Das Übergangsziel nach dem Aktualisieren der Mitgliedsinformationen kann auch wie oben beschrieben geändert werden. Die Beschreibung ist in der 57. Zeile oder weniger in Ordnung.  def after_update_path_for(resource)   mypage_path  end

Unter Zeile 27 hinzugefügt.

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

Erläuterung Geben Sie beim An- und Abmelden das Übergangsziel an.

devise_for: users Zusätzliche Beschreibung unten.

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