2014-05-11 5 views
0

관리자와 고객이라는 두 가지 사용자 유형이 있습니다. 관리자가 영향을받지 않고 (즉, 이메일로 계속 로그인) 고객을 유지하면서 사용자 이름만으로 고객을 로그인하려고했습니다. 로그인시 이메일을 삭제하는 과정을 밟았습니다. 그러나 프로세스가 관리자에게 영향을 미치고있는 것으로 나타났습니다. 더 이상 이메일로 로그인 할 수 없습니다.하나의 사용자 유형에서만 전자 메일 대신 사용자 이름을 인증 키로 사용하도록 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> 
+0

이 링크를 확인 했습니까? https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address. 이게 도움이되는지 알려줘. – Dave

답변

1

당신은 User 모델에 대한 귀하의 find_first_by_auth_conditions 메소드를 오버라이드 (override) 할 수있을 때

config.authentication_keys = Proc.new { [ :email ] } 

실패에 ​​대한, AR 찾는 방법을 기억하지 못합니다.

관련 문제