Lors de la création d'une fonction de connexion, etc. en utilisant une gemme appelée devise of Rails Je pense qu'il y a des moments où vous souhaitez séparer l'écran de connexion et la gestion entre le grand public et l'entreprise.
J'ai utilisé la conception pour créer des applications Web, C'est la première fois que je le mets en œuvre sur plusieurs modèles, je voudrais donc le garder sous forme de mémorandum.
environnement
Ruby:   2.5.6
Rails:  5.2.4
devise: 4.7.3
Depuis que je travaille dans docker, il a bundle exec,
Si vous êtes en dehors du docker, veuillez le supprimer et le saisir.
Je voulais aussi faire une authentification Facebook cette fois, alors j'ai ajouté devise et omniauth-twitter au Gemfile
Gemfile
gem 'devise'
gem 'omniauth-facebook'
Et installation groupée
Entrez la commande suivante dans le terminal
bundle exec rails g devise:install
Je pense que les mots suivants sortiront
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 *
===============================================================================
Vérifiez le contenu de chacun et ajoutez-les.
config / environnements / development.rb.
Comme on m'a dit, je vais lister l'URL par défaut.config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config / routes.rb en tant que root (lors de l'accès à l'URL définie en 1)
Je ne l'ai pas encore créé, je vais donc le créer ici.Terminal
bundle exec rails g controller Posts(Nom du contrôleur) index
Définissez l'URL dans config / routes.rb
config/routes.rb
Rails.application.routes.draw do
  root 'posts#index'
end
app / views / layouts / application.html.erb
J'ai écrit ce qui est décrit pour le moment.ruby:app/views/layouts/application.html.erb
.
.
.
  <body>
    <p class="notice"><%= notice %></p>
    <p class="alert"><%= alert %></p>
    <%= yield %>
  </body>
</html>
Changez le paramètre de config / initializers / devise.rb pour créer 2 modèles de connexion.
Il a été initialement commenté, alors cherchez-le!
config/initializers/devise.rb(Changer avant)
.
#config.scoped_views = false
.
.
#config.sign_out_all_scopes = true
.
config/initializers/devise.rb(Après le changement)
#Modification des écrans de connexion séparés pour plusieurs modèles
config.scoped_views = true
#Empêche la déconnexion de l'un lors de la déconnexion de l'autre lors de la connexion avec plusieurs modèles
config.sign_out_all_scopes = false
Cette fois, je vais faire deux patrons, le grand public et l'entreprise!
Terminal
bundle exec rails g devise user
bundle exec rails g devise company
(Étant donné que le même fichier que le nom du modèle est généré, le fichier du modèle d'entreprise est omis.)
db/migrate/20201112105533_devise_create_users.rb
# frozen_string_literal: true
class DeviseCreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at
      ## Rememberable
      t.datetime :remember_created_at
      ## Trackable
      # t.integer  :sign_in_count, default: 0, null: false
      # t.datetime :current_sign_in_at
      # t.datetime :last_sign_in_at
      # t.string   :current_sign_in_ip
      # t.string   :last_sign_in_ip
      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable
      ## Lockable
      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at
      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
Ajout de : omniauthable et omniauth_providers: [: facebook] pour incorporer l'authentification Facebook.
models/user.rb
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable, :omniauthable, omniauth_providers: [:facebook]
end
Bundle exec rails db: migrate où vous pouvez apporter des modifications et des ajouts
config/routes.rb
Rails.application.routes.draw do
  devise_for :companies
  devise_for :users
  root 'postss#index'
end
La partie Controller # Action est la même pour l'entreprise et l'utilisateur. En d'autres termes, les contrôleurs sont les mêmes et doivent être modifiés. (* Seule l'action du contrôleur # a été séparée ... C'est ennuyeux et je ne peux pas le réparer, alors faites-le glisser vers la droite ...! )
Terminal
          Prefix Verb             URI Pattern                                                                          Controller#Action
             new_company_session GET      /companies/sign_in(.:format)                                                            devise/sessions#new
                 company_session POST     /companies/sign_in(.:format)                                                            devise/sessions#create
         destroy_company_session DELETE   /companies/sign_out(.:format)                                                           devise/sessions#destroy
            new_company_password GET      /companies/password/new(.:format)                                                       devise/passwords#new
           edit_company_password GET      /companies/password/edit(.:format)                                                      devise/passwords#edit
                company_password PATCH    /companies/password(.:format)                                                           devise/passwords#update
                                 PUT      /companies/password(.:format)                                                           devise/passwords#update
                                 POST     /companies/password(.:format)                                                           devise/passwords#create
     cancel_company_registration GET      /companies/cancel(.:format)                                                             devise/registrations#cancel
        new_company_registration GET      /companies/sign_up(.:format)                                                            devise/registrations#new
       edit_company_registration GET      /companies/edit(.:format)                                                               devise/registrations#edit
            company_registration PATCH    /companies(.:format)                                                                    devise/registrations#update
                                 PUT      /companies(.:format)                                                                    devise/registrations#update
                                 DELETE   /companies(.:format)                                                                    devise/registrations#destroy
                                 POST     /companies(.:format)                                                                    devise/registrations#create
                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
user_facebook_omniauth_authorize GET|POST /users/auth/facebook(.:format)                                                           devise/omniauth_callbacks#passthru
 user_facebook_omniauth_callback GET|POST /users/auth/facebook/callback(.:format)                                                  devise/omniauth_callbacks#facebook
               new_user_password GET      /users/password/new(.:format)                                                            devise/passwords#new
              edit_user_password GET      /users/password/edit(.:format)                                                           devise/passwords#edit
                   user_password PATCH    /users/password(.:format)                                                                devise/passwords#update
                                 PUT      /users/password(.:format)                                                                devise/passwords#update
                                 POST     /users/password(.:format)                                                                devise/passwords#create
        cancel_user_registration GET      /users/cancel(.:format)                                                                  devise/registrations#cancel
           new_user_registration GET      /users/sign_up(.:format)                                                                 devise/registrations#new
          edit_user_registration GET      /users/edit(.:format)                                                                    devise/registrations#edit
               user_registration PATCH    /users(.:format)                                                                         devise/registrations#update
                                 PUT      /users(.:format)                                                                         devise/registrations#update
                                 DELETE   /users(.:format)                                                                         devise/registrations#destroy
                                 POST     /users(.:format)                                                                         devise/registrations#create
config/routes.rb
devise_for :companies, controllers: {
    sessions:      'companies/sessions',
    passwords:     'companies/passwords',
    registrations: 'companies/registrations'
  }
  devise_for :users, controllers: {
    sessions:           'users/sessions',
    passwords:          'users/passwords',
    registrations:      'users/registrations',
    omniauth_callbacks: 'users/omniauth_callbacks'
  }
Si vous vérifiez à nouveau avec bundle exec rails routes, je pense que la partie contrôleur a été modifiée en toute sécurité!
C'est la partie qui n'était pas prise en charge lorsque le premier rails g devise: install a été exécuté.
Terminal
bundle exec rails g devise:views users
bundle exec rails g devise:views companies
Je pense que chaque fichier a été généré!
Terminal
bundle exec rails generate devise:controllers users
bundle exec rails generate devise:controllers companies
Je pense que le résultat de l'exécution sera comme ça.
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
===============================================================================
La partie inférieure, une erreur de jour de pluie! ?? J'ai pensé, mais ce n'est pas une erreur. (Chaud Puisque le contrôleur ressemble à ceci, vous devez ajouter la description suivante à routes.rb ~ Je donne un exemple et m'apprends.
Comme il a été défini plus tôt, vous pouvez l'ignorer!
À ce rythme, même si vous accédez à http: // localhost: 3000 / users / sign_in, une erreur se produira.
Quelque chose comme `` méthode non définie omniauth_authorize_path'for ~ `. ..
Je n'entrerai pas dans les paramètres d'authentification Facebook ici, dans app / views / users / shared / _links.html.erb La partie de omniauth_authorize_path (nom_ressource, fournisseur) est étrange.
Si vous vérifiez le ruding, il n'y a pas de chemin appelé omniauth_authorize_path, il devrait être user_facebook_omniauth_authorize_path, donc corrigeons-le.
Je n'ai pas changé le nom en utilisant comme ...? J'ai pensé, Je ne savais pas pourquoi. Est-ce depuis le début ...?
En tous cas! Pour le moment, la partie réglage de base est terminée.
http: // localhost: 3000 / users / sign_in et http: // localhost: 3000 / companies / sign_in
Quelle que soit la manière dont vous accédez, vous verrez l'écran de connexion!
Ajoutez plus de colonnes ou personnalisez si nécessaire!
J'espère que cet article aide quelqu'un. Merci beaucoup!
Recommended Posts