Rails6.1+devise의 controller와view를 맞춤형 상태로 만들기

34451 단어 Railsdevisetech
네, 저번에 계속.
docker-compose에서 rails new, Rails 61+ 테스트 devise | 기타야마 준야|zen
  • https://zenn.dev/junki555/articles/83339b5d58f416
  • TL;DR


    아래의 보도와 차이가 많지 않다.
    다만, 컨트롤러 생성 후 어떻게 편집
    왜냐하면 잘 쓴 controller와view의 해설을 못 봤거든요.
    그 근처에 내가 자세히 써 보았다.
  • Devise 설정 단계가 요약되어 있습니다.2 View 및 Controller의 맞춤형 구성
  • https://qiita.com/hakatatech/items/f991d54ff527edb844d9
  • Rails devise의 가져오기와 View+Controller의 맞춤형 (sign in/out 후 path 지정 등)|Qita
  • https://qiita.com/mmmasuke/items/7d5c47b4a40f6912adf2
  • 이번에 할 일, 안 할 일.

  • 할 일
  • devise의 보기와 컨트롤러의 맞춤형 제작
  • 하지 않는 일
  • 청결한 보기의 외관
  • 차리다


    지난번 앱 컨테이너의 단말기에서 작업을 계속합니다.docker-compose down 용기가 떨어지면 다시 확인하세요
    docker-compose run --rm --service-ports app bash
    
    에서 앱 컨테이너 단말기에 로그인하세요.

    지령으로 빠르게 준비하다

    bundle exec rails g devise:views usersbundle exec rails g devise:controllers users 그리고
    필요한 것을 만들어라.
    (지난번bundle install--path vendor/bundle분실시 bundle exec를 사용하지 않고 다음 명령을 bundle exec의 부분으로 실행하십시오)
    $ bundle exec rails g devise:views users
    Running via Spring preloader in process 10924
          invoke  Devise::Generators::SharedViewsGenerator
          create    app/views/users/shared
          create    app/views/users/shared/_error_messages.html.erb
          create    app/views/users/shared/_links.html.erb
          invoke  form_for
          create    app/views/users/confirmations
          create    app/views/users/confirmations/new.html.erb
          create    app/views/users/passwords
          create    app/views/users/passwords/edit.html.erb
          create    app/views/users/passwords/new.html.erb
          create    app/views/users/registrations
          create    app/views/users/registrations/edit.html.erb
          create    app/views/users/registrations/new.html.erb
          create    app/views/users/sessions
          create    app/views/users/sessions/new.html.erb
          create    app/views/users/unlocks
          create    app/views/users/unlocks/new.html.erb
          invoke  erb
          create    app/views/users/mailer
          create    app/views/users/mailer/confirmation_instructions.html.erb
          create    app/views/users/mailer/email_changed.html.erb
          create    app/views/users/mailer/password_change.html.erb
          create    app/views/users/mailer/reset_password_instructions.html.erb
          create    app/views/users/mailer/unlock_instructions.html.erb
          invoke  Devise::Generators::SharedViewsGenerator
          create    app/views/users/shared
          create    app/views/users/shared/_error_messages.html.erb
          create    app/views/users/shared/_links.html.erb
          invoke  form_for
          create    app/views/users/confirmations
          create    app/views/users/confirmations/new.html.erb
          create    app/views/users/passwords
          create    app/views/users/passwords/edit.html.erb
          create    app/views/users/passwords/new.html.erb
          create    app/views/users/registrations
          create    app/views/users/registrations/edit.html.erb
          create    app/views/users/registrations/new.html.erb
          create    app/views/users/sessions
          create    app/views/users/sessions/new.html.erb
          create    app/views/users/unlocks
          create    app/views/users/unlocks/new.html.erb
          invoke  erb
          create    app/views/users/mailer
          create    app/views/users/mailer/confirmation_instructions.html.erb
          create    app/views/users/mailer/email_changed.html.erb
          create    app/views/users/mailer/password_change.html.erb
          create    app/views/users/mailer/reset_password_instructions.html.erb
          create    app/views/users/mailer/unlock_instructions.html.erb
    
    $ bundle exec rails g devise:controllers users
    Running via Spring preloader in process 10933
          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
    
    ===============================================================================
    

    생성된 설명


    $ bundle exec rails g devise:views users
    
    이번 사용
    개요
    path

    공동으로 사용하는 물건
    app/views/users/Shared 부하

    사용자 등록 확인 메시지
    app/views/users/confirmations 부하

    비밀번호를 까먹었을 때.
    app/views/users/passwords 부하

    서명(등록 비밀번호), 비밀번호 편집 등
    app/views/users/registrations 부하

    로그인, 로그오프
    app/views/users/sessions 부하

    기능별 HTML 메시지 본문
    app/views/users/mailer 다운로드
    $ bundle exec rails g devise:controllers users
    
    이번 사용
    개요
    path

    사용자 등록 확인 메시지
    app/controllers/users/confirmations_controller.rb

    비밀번호를 까먹었을 때.
    app/controllers/users/passwords_controller.rb

    서명(등록 비밀번호), 비밀번호 편집 등
    app/controllers/users/registrations_controller.rb

    로그인, 로그오프
    app/controllers/users/sessions_controller.rb

    블록 분리 기능
    app/controllers/users/unlocks_controller.rb
    ×
    OmniAuth의 호출
    app/controllers/users/omniauth_callbacks_controller.rb

    생성 컨트롤러에 대한 설명 삭제

    bundle exec rails g devise:controllers users에서 생성된 컨트롤러
    모두 논평에서 벗어났다.
    사용할 컨트롤러의 주석을 제거하고 사용할 수 있는 상태로 만듭시다.
    생성된 평론을 번역해 봤습니다.
    더 많은 것이 있었기 때문에 실제로 생성된 컨트롤러가 두드려졌는지puts를 확인하기 위해 몇 개를 추가했다.
    스스로 더 확인하고 싶다면 적절히 추가puts해주세요.
    또한 생성된 컨트롤러 내의 주석의
    # GET /resource/sign_in
    
    /resource가 되는 부분은 각각 생성 대상으로 하는 리소스입니다.
    라는 뜻이다.
    그래서 이번/resource/user을 가리킨다.# GET /resource/sign_in# GET /users/sign_in.
    마찬가지로 주석 부분은 편집되었습니다.
    그럼 생성된 컨트롤러의 댓글을 벗어주세요.
    app/controllers/users/confirmations_controller.rb
    # frozen_string_literal: true
    
    class Users::ConfirmationsController < Devise::ConfirmationsController
      # GET /users/confirmation/new
      def new
        super
      end
    
      # POST /users/confirmation
      def create
        super
      end
    
      # GET /users/confirmation?confirmation_token=abcdef
      def show
        super
      end
    
      protected
    
      # 確認指示を再送した後に使用する path
      def after_resending_confirmation_instructions_path_for(resource_name)
        super(resource_name)
      end
    
      # 確認後に使用する path
      def after_confirmation_path_for(resource_name, resource)
        super(resource_name, resource)
      end
    end
    
    app/controllers/users/passwords_controller.rb
    # frozen_string_literal: true
    
    class Users::PasswordsController < Devise::PasswordsController
      # GET /users/password/new
      def new
        super
      end
    
      # POST /users/password
      def create
        super
      end
    
      # GET /users/password/edit?reset_password_token=abcdef
      def edit
        super
      end
    
      # PUT /users/password
      def update
        super
      end
    
      protected
    
      def after_resetting_password_path_for(resource)
        super(resource)
      end
    
      # リセットパスワードの指示を送信した後に使用する path
      def after_sending_reset_password_instructions_path_for(resource_name)
        super(resource_name)
      end
    end
    
    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]
    
      # GET /users/sign_up
      def new
        super
    
        puts '========================='
        puts 'GET /resource/sign_up'
        puts '========================='
      end
    
      # POST /users
      def create
        super
      end
    
      # GET /users/edit
      def edit
        super
    
        puts '========================='
        puts 'GET /resource/edit'
        puts '========================='
      end
    
      # PUT /users
      def update
        super
      end
    
      # DELETE /users
      def destroy
        super
      end
    
      # GET /users/cancel
      # 通常はサインイン後に
      # 期限切れになるセッションデータを強制的に今すぐ期限切れにします。
      # これは、ユーザーがすべての OAuth セッションデータを削除して、
      # 途中で oauth サインイン/アップをキャンセルしたい場合に便利です。
      def cancel
        super
      end
    
      protected
    
      # 許可するための追加のパラメータがある場合は、sanitizer に追加してください
      def configure_sign_up_params
        devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute])
      end
    
      # 許可するための追加のパラメータがある場合は、sanitizer に追加してください
      def configure_account_update_params
        devise_parameter_sanitizer.permit(:account_update, keys: [:attribute])
      end
    
      # サインアップ後に使用する path
      def after_sign_up_path_for(resource)
        super(resource)
      end
    
      # アクティブでないアカウントのサインアップ後に使用する path
      def after_inactive_sign_up_path_for(resource)
        super(resource)
      end
    end
    
    app/controllers/users/sessions_controller.rb
    # frozen_string_literal: true
    
    class Users::SessionsController < Devise::SessionsController
      before_action :configure_sign_in_params, only: [:create]
    
      # GET /users/sign_in
      def new
        super
    
        puts '========================='
        puts 'GET /resource/sign_in'
        puts '========================='
      end
    
      # POST /users/sign_in
      def create
        super
      end
    
      # GET /users/sign_out
      # ここは config/initializers/devise.rb で config.sign_out_via = :get としているので DELETE ではなく GET
      def destroy
        super
      end
    
      protected
    
      # 許可するための追加のパラメータがある場合は、sanitizer に追加してください
      def configure_sign_in_params
        devise_parameter_sanitizer.permit(:sign_in, keys: [:attribute])
      end
    end
    
    app/controllers/users/unlocks_controller.rb
    # frozen_string_literal: true
    
    class Users::UnlocksController < Devise::UnlocksController
      # GET /users/unlock/new
      def new
        super
      end
    
      # POST /users/unlock
      def create
        super
      end
    
      # GET /users/unlock?unlock_token=abcdef
      def show
        super
      end
    
      protected
    
      # パスワードのロック解除指示を送信した後に使用する path
      def after_sending_unlock_instructions_path_for(resource)
        super(resource)
      end
    
      # リソースのロックを解除した後に使用する path
      def after_unlock_path_for(resource)
        super(resource)
      end
    end
    

    생성된 컨트롤러를 사용하여config/routes를 진행합니다.편집


    이것 괜찮아요?
    config/routes.rb
    # 前回の作業が終わった状態の config/routes.rb
    Rails.application.routes.draw do
      devise_for :users
      get 'home/index'
      get 'home/show'
    
      root to: "home#index"
    
      ## 開発環境用letter_opener
      mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development?
      # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
    end
    
    이렇게 편집된 느낌.
    config/routes.rb
    Rails.application.routes.draw do
      devise_for :users, :controllers => {
        :confirmations => 'users/confirmations',
        :registrations => 'users/registrations',
        :sessions => 'users/sessions',
        :passwords => 'users/passwords'
       }
    
      get 'home/index'
      get 'home/show'
    
      root to: "home#index"
    
      ## 開発環境用letter_opener
      mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development?
      # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
    end
    
    어렵지 않아요.

    동작 확인


    에서 Rails 서버 확인 작업을 시작합니다.
    방문
    bundle exec rails s -b "0.0.0.0"
    
    http://localhost:3000에서 로그인을 눌러 보세요.rails s의 터미널
    =========================
    GET /resource/sign_up
    =========================
    Completed 200 OK in 135ms (Views: 124.2ms | Allocations: 5207)
    
    나왔어요?
    했어!생성된 컨트롤러와 보기를 사용자 정의할 수 있습니다.
    다른 부분도 추가puts 해볼게요.
    생성된 컨트롤러와 보기를 사용했는지 확인하십시오.
    이번 창고는 여기 있습니다.
    https://github.com/JUNKI555/rails_authentication_practice01

    참고 자료

  • Devise 설정 단계가 요약되어 있습니다.2 View 및 Controller의 맞춤형 구성
  • https://qiita.com/hakatatech/items/f991d54ff527edb844d9
  • Rails devise의 가져오기와 View+Controller의 맞춤형 (sign in/out 후 path 지정 등)|Qita
  • https://qiita.com/mmmasuke/items/7d5c47b4a40f6912adf2
  • Rails를 통한 맞춤형 Devise 컨트롤러
  • https://easyramble.com/cutomize-controllers-on-rails-devise.html
  • Devise의 devisefor 메소드를 통한 라우팅 확인 | EasyRamble
  • https://easyramble.com/routing-by-devise-for.html
  • devise 사용자의 프로필 화면 제작 및 편집(기본 사용자 정의)|Qita
  • https://qiita.com/akr03xxx/items/82ba45f7ef4fdbd5c702
  • 좋은 웹페이지 즐겨찾기