관리자와 고객이라는 두 가지 사용자 유형이 있습니다. 관리자가 영향을받지 않고 (즉, 이메일로 계속 로그인) 고객을 유지하면서 사용자 이름만으로 고객을 로그인하려고했습니다. 로그인시 이메일을 삭제하는 과정을 밟았습니다. 그러나 프로세스가 관리자에게 영향을 미치고있는 것으로 나타났습니다. 더 이상 이메일로 로그인 할 수 없습니다.하나의 사용자 유형에서만 전자 메일 대신 사용자 이름을 인증 키로 사용하도록 Devise를 사용자 정의하는 방법은 무엇입니까?
문제는 내가
Config.authentication_keys = [ :username ] #For customers
까지 런타임에 유증의 구성 옵션을 변경하는 방법을 찾을 수 있다는 것입니다 :
Config.authentication_keys = [ :email ] #For admins
네임 스페이스를 기반으로.
그런 일을 할 수 있습니까?
P.S : 구성 옵션에 논리를 추가하기 위해 Proc.new {#block}
~ Config.authentication_keys
을 삽입하려고했으나 옵션이 배열이 될 것으로 기대하는 Devise 때문에 실패했습니다.
# app/models/user.rb
def self.find_first_by_auth_conditions(conditions, opts={})
if admin?
find_by(email: conditions[:login])
else
find_by(username: conditions[:login])
end
end
# config/initializers/desvise.rb
Devise.setup do |config|
config.authentication_keys = [:login]
PS : 예 예를 들어
:이 오류와 함께 devise_parameter_sanitizer.for(:sign_up) << [..]
와 매개 변수를 살균
undefined method `+' for #<Proc:0x5d872a0>
이 링크를 확인 했습니까? https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address. 이게 도움이되는지 알려줘. – Dave