전자 메일을 기본 필드로 사용하지 않으려면 다른 전자 메일을 지정할 수 있습니다. 이 예제에서는 :username
을 필드 이름으로 사용하지만 필드는 모두 사용할 수 있습니다.
이를 구현하려면, config/initializers/devise.rb
파일에 다음 텍스트를 주석을 해제하고 로그인시 사용할 필드, 같은 :username
로 지정
devise :database_authenticatable, :authentication_keys => [:username]
:
config.authentication_keys = [:username]
또 다른 방법을 변경하여 모델을
그런 다음 모델에 검증을 추가
validates :email,uniqueness: true
validates :username,uniqueness: true
그런 다음, 마이그레이션을 만들고 마이그레이션 :
rails generate migration add_username_to_users username:string:uniq
rake db:migrate
다음을 생성하고 사용자 편집 할 때 해당 필드를 설정할 수 있는지 확인하십시오. 최신 버전의 레일에서 strong parameters 기능을 사용하는 경우 컨트롤러에서 해당 파라미터를 .permit(:username)
으로 읽는 것을 허용하십시오. 또는 이전 버전의 레일즈를 사용하는 경우 모델에서 attr_accessible :username
으로 필드를 액세스 할 수있게 만드십시오.
rails generate devise:views
을 그리고 당신은 새로운 양식 필드를 사용하는 app/views/devise/sessions/new.html.erb
및 app/views/devise/registrations/new.html.erb
의 견해를 수정해야합니다 :
이 후 다음 명령을 사용하여 고안 뷰를 생성 할 수 있습니다.
마지막으로 잘못된 자격 증명을 제공하거나 찾을 수없는 경우 사용자에게 표시되는 오류 메시지를 변경해야 할 수도 있습니다. config/locales/devise.en.yml
에서이 작업을 수행하십시오.
invalid: 'Invalid email or password.'
not_found_in_database: 'Invalid email or password.'
을이로 변경 : 다음을 찾아
invalid: 'Invalid username or password.'
not_found_in_database: 'Invalid username or password.'
을 대신
invalid: "Invalid %{authentication_keys} or password."
not_found_in_database: "Invalid %{authentication_keys} or password."
를 볼 경우, 당신은 아무것도 변경할 필요가 없습니다.
전자 메일을 인증 키로 사용하지 않는 경우 사용자가 동일한 전자 메일 주소로 여러 계정을 가질 수 있습니다. 이렇게하면 일치하는 전자 메일을 찾은 첫 번째 계정에 암호 재설정 전자 메일의 링크 만 포함되므로 "복구 가능"모듈이 제대로 작동하지 않게됩니다. 비밀번호 재설정 이메일에 모든 계정 정보를 추가하는 방법을 구현하는 방법은 a thread on the Google Group입니다.
중요 : 당신이 validatable
모듈을 사용하는 경우, email_required?
및 email_changed?
을 정의
# app/models/model.rb
class Model < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable,
:trackable, :lockable, :validatable
def email_required?
false
end
def email_changed?
false
end
# use this instead of email_changed? for rails >= 5.1
def will_save_change_to_email?
false
end
end
당신이 confirmable
또는 recoverable
모듈을 사용하는 경우, 당신은 단지 false
에 email_changed?
를 정의 할 필요가있다.