devise에서 사용자 등록을 할 수 없을 때 의심하는 6 점

7086 단어 SequelProRailsdevise

어디까지 했니?


  • devise 설치
  • 모델 만들기
  • 마이그레이션 파일에 열 추가
  • form_with에서 f.label과 f.text_field에 users 테이블의 열 이름을 넣어 양식을 만들었습니다.

    이 상태에서 폼에 입력해도 데이터베이스에 저장되지 않는 경우의 체크리스트입니다.
    users 테이블에 존재하는 열이 무엇인지 자세한 내용은 생략합니다.

    1. 밸리데이션



    모델에서 이상한 제약을 가하지 않는지 살펴 보겠습니다.

    user.rb
      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :validatable
             validates :name, presence: true
             validates :profile, presence: true
             validates :occupation, presence: true
             validates :position, presence: true
    

    2. migration 파일의 제약



    테이블 작성시에 이상한 제약을 걸고 있지 않은지 봅시다.

    devise_create_users.rb
          t.string :email,              null: false, default: ""
          t.string :encrypted_password, null: false, default: ""
          t.string :name
          t.text :profile
          t.text :occupation
          t.text :position
    

    3. 스트롱 파라미터



    devise는 스트롱 매개 변수를 사용할 수 없으므로 대신 devise_parameter_sanitizer를 사용합니다.
    나는 컬럼이 하나 빠져 있었다. 검토하자.
    구체적으로는, email의 컬럼을 허가하는 것을 잊고 있었습니다만, 터미널에서 실행했을 때 이 이미지와 같이, email의 뒤에 ROLLBACK 되고 있었으므로 무언가 그 변이 이상하다고 깨달았습니다 .



    application_controller.rb
    class ApplicationController < ActionController::Base
      before_action :configure_permitted_parameters, if: :devise_controller?
    
      private
      def configure_permitted_parameters
        devise_parameter_sanitizer.permit(:sign_up, keys: [ :email, :encrypted_password, :name, :profile, :occupation, :position])
      end
    end
    

    4. 어소시에이션



    테이블을 하나만 작성하고 있는 상태라면 관계 없습니다만, 복수 테이블이 있는 경우는 has_many 복수형, blongs_to 단수계, 등

    5. password 열 이름



    결국 이것이 원인이었습니다.
    devise에서 users 테이블의 열(기본적으로 encryped_password)이지만 form_with의 암호와 암호 재입력에서는 각각 열 이름을 password, password_confimation으로 기술해야 합니다. 이는 password와 password_confimation이 동일한지 확인하고, 동일하면 encryped_password에 암호화된 문자열을 반환하는 기능이 devise에 구현되어 있기 때문입니다.


    실수


            <%= form_with model: @user, url: user_registration_path, local: true do |f| %>
    
            <div class="field">
              <%= f.label :encryped_password, "パスワード(6文字以上)" %><br />
              <%= f.password_field :encryped_password, autocomplete: "new-password" %>
            </div>
    
            <div class="field">
              <%= f.label :encryped_password, "パスワード再入力" %><br />
              <%= f.password_field :encryped_password, autocomplete: "new-password" %>
            </div>
    以下略
    

    정답


            <%= form_with model: @user, url: user_registration_path, local: true do |f| %>
    
            <div class="field">
              <%= f.label :password, "パスワード(6文字以上)" %><br />
              <%= f.password_field :password, autocomplete: "new-password" %>
            </div>
    
            <div class="field">
              <%= f.label :password_confirmation, "パスワード再入力" %><br />
              <%= f.password_field :password_confirmation, autocomplete: "new-password" %>
            </div>
    以下略
    

    6. 데이터베이스 시각화 소프트웨어가 원인



    이전 다른 곳에서 발생했습니다만, 데이터베이스를 가시화하고 있는 소프트를 (나의 경우는 Sequel Pro) 재기동하면 실은 보존되고 있었다, 뭐 일도 있을 수 있으므로 확인해 주세요.

    이상
  • 좋은 웹페이지 즐겨찾기