devise에서 사용자 등록을 할 수 없을 때 의심하는 6 점
어디까지 했니?
이 상태에서 폼에 입력해도 데이터베이스에 저장되지 않는 경우의 체크리스트입니다.
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.rbclass 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) 재기동하면 실은 보존되고 있었다, 뭐 일도 있을 수 있으므로 확인해 주세요.
이상
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :name, presence: true
validates :profile, presence: true
validates :occupation, presence: true
validates :position, presence: true
테이블 작성시에 이상한 제약을 걸고 있지 않은지 봅시다.
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.rbclass 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) 재기동하면 실은 보존되고 있었다, 뭐 일도 있을 수 있으므로 확인해 주세요.
이상
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
테이블을 하나만 작성하고 있는 상태라면 관계 없습니다만, 복수 테이블이 있는 경우는 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) 재기동하면 실은 보존되고 있었다, 뭐 일도 있을 수 있으므로 확인해 주세요.
이상
<%= 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>
以下略
이전 다른 곳에서 발생했습니다만, 데이터베이스를 가시화하고 있는 소프트를 (나의 경우는 Sequel Pro) 재기동하면 실은 보존되고 있었다, 뭐 일도 있을 수 있으므로 확인해 주세요.
이상
Reference
이 문제에 관하여(devise에서 사용자 등록을 할 수 없을 때 의심하는 6 점), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/magatama/items/c5705e45ce8d60f925ff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)