Bis jetzt hatte ich selbst Authentifizierungsfunktionen wie An- und Abmelden implementiert, aber ich möchte dieses Mal beim Erstellen eines Portfolios das Gerät verwenden, sodass ich diesen Artikel als Erinnerung an die Verwendung belasse.
Es wurde bestätigt, dass dieser Artikel in den folgenden Umgebungen funktioniert. ruby 2.7.1 rails 6.0.3 devise 4.7.3
Gemfile hinzugefügt. Ich werde es in der zweiten Hälfte ins Japanische übersetzen, also werde ich auch dieses Juwel einbeziehen.
Gemfile
gem 'devise'
gem 'devise-i18n'
gem 'devise-i18n-views'
Führen Sie bundle install
aus.
$ bundle install
Erstellen Sie verwandte Dateien.
$ rails g devise:install
Anschließend wird eine Datei erstellt und der folgende englische Text angezeigt.
Running via Spring preloader in process 5911
create config/initializers/devise.rb
create config/locales/devise.en.yml
===============================================================================
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 *
===============================================================================
config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config/routes.rb
root to: 'homes#index'
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
$ rails g devise User
In der erstellten Migrationsdatei gibt es nur E-Mail und Kennwort. Fügen Sie daher alle Spalten hinzu, die Sie hinzufügen möchten. Führen Sie nach dem Hinzufügen die Migration aus.
$ rails db:migrate
Öffnen Sie zu diesem Zeitpunkt http: // localhost: 3000 / users / sign_up und eine neue Registrierungsseite wird erstellt. Wenn Sie vergessen haben, eine Spalte hinzuzufügen, und diese später hinzufügen möchten, führen Sie Folgendes aus. (Dieses Mal wird davon ausgegangen, dass die Spalte Benutzername hinzugefügt wird.)
$ rails g migration add_username_to_users username:string
Geben Sie unbedingt den Benutzernamen ein, und fügen Sie eine NOT NULL-Einschränkung hinzu.
db/migrate/XXXXXXXXXXXXXX_add_username_to_users.rb
class AddUsernameToUsers < ActiveRecord::Migration[6.0]
def change
add_column :users, :username, :string, null: false
end
end
Ich möchte die Ansicht anpassen, also führen Sie Folgendes aus.
$ rails g devise:views users
Reflektiert den bearbeiteten Inhalt der Ansicht.
config/initializers/devise.rb
#Konfiguration in Zeile 247.scoped_views =Kommentieren Sie false aus und ändern Sie es in true
config.scoped_views = true
Ermöglicht die Registrierung von Benutzernamen während der Anmeldung.
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
end
end
$ rails g devise:controllers users
Die Controller-Datei und der englische Text werden angezeigt.
Running via Spring preloader in process 9004
create app/controllers/users/confirmations_controller.rb
create app/controllers/users/passwords_controller.rb
create app/controllers/users/registrations_controller.rb
create app/controllers/users/sessions_controller.rb
create app/controllers/users/unlocks_controller.rb
create app/controllers/users/omniauth_callbacks_controller.rb
===============================================================================
Some setup you must do manually if you haven't yet:
Ensure you have overridden routes for generated controllers in your routes.rb.
For example:
Rails.application.routes.draw do
devise_for :users, controllers: {
sessions: 'users/sessions'
}
end
===============================================================================
Lassen Sie uns hier das aktuelle Routing überprüfen.
$ rails routes
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
...
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
Wenn der Controller # -Aktionsteil Gerät / Registrierungen, Gerät / Sitzungen wie dieses ist, wird die zu definierende Methode nicht wiedergegeben.
Überschreiben Sie die Route gemäß dem englischen Text, der beim Erstellen des Controllers angezeigt wurde.
config/routes.rb
devise_for :users, controllers: {
registrations: 'users/registrations',
sessions: 'users/sessions'
}
Nachdem wir es überschrieben haben, überprüfen Sie das aktuelle Routing.
$ rails routes
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) users/sessions#new
user_session POST /users/sign_in(.:format) users/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroy
...
new_user_registration GET /users/sign_up(.:format) users/registrations#new
Jetzt können Sie den Controller anpassen. Definieren Sie die Methode.
app/controllers/users/registrations_controller.rb
#Leiten Sie das Ziel nach dem Erstellen eines Kontos um
def after_sign_up_path_for(resource)
root_path
end
#Leiten Sie das Ziel nach dem Bearbeiten des Kontos um
def after_update_path_for(resource)
root_path
end
app/controllers/users/sessions_controller.rb
#Ziel nach Abmeldung umleiten
def after_sign_out_path_for(resource)
root_path
end
#Ziel nach Anmeldung umleiten
def after_sign_in_path_for(resource)
root_path
end
Jetzt befinden sich alle Weiterleitungsziele auf der obersten Seite.
Stellen Sie zunächst die Standardsprache für diese Rails-Anwendung auf Japanisch ein.
config/application.rb
require_relative 'boot'
require 'rails/all'
Bundler.require(*Rails.groups)
module ConnectStudy
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 6.0
config.i18n.default_locale = :ja #Hier hinzufügen
end
end
Generieren Sie eine japanische Übersetzungsdatei für devise.
$ rails g devise:views:locale ja
Dies wird auf Japanisch sein. Vergessen Sie nicht, den Server neu zu starten, wenn Sie die Konfiguration ändern.
devise hat auch viele nützliche Hilfsmethoden, daher möchte ich sie verwenden, um Apps effizient zu entwickeln.
Recommended Posts