2012-06-09 2 views
0

Twitter/FB 용 Omniauth 로그인을 설정하려고합니다. 나는 사용자 생성시 암호와 전자 메일의 유효성을 검사하는 자체 인증 시스템을 만들었습니다. 그러나 사용자가 Twitter/Fb를 통해 로그인 할 때 비밀번호 나 이메일을 확인하고 싶지 않습니다.개체가 특정 메서드에서 생성 된 경우 유효성 검사 건너 뛰기

나는 omniauth_login이라는 사용자 속성을 만들었습니다. 나는 should_validate_password에 유효성 검사가 필요한지 아닌지를 테스트하기 위해 부울 값으로 사용하고 있습니까? 방법. 내가 통해 로그인하여 새 사용자를 만들려고 할 때

sessions_controller.rb

def omniauth_create 
    auth = request.env["omniauth.auth"] 
    user = User.new 
    user.omniauth_login = 'true' 
    user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) ||   
     User.create_with_omniauth(auth) 
    session[:user_id] = user.id 
    redirect_to user 
end 

:

User.rb 여기

attr_accessor :password, :updating_password, :omniauth_login 
validates_presence_of :password, :if => :should_validate_password? 
validates_confirmation_of :password, :if => :should_validate_password? 

def should_validate_password? 
    (updating_password || new_record?) && !(self.omniauth_login == 'true') 
end 

def self.create_with_omniauth(auth) 
    create! do |user| 
    user.provider = auth["provider"] 
    user.uid = auth["uid"] 
    user.name = auth["info"]["name"] 
    end 
end 

사용자를 만드는 데 사용 내 컨트롤러 트위터, 난 아직 유효성 검사 오류가 나타납니다 :

create_with_omniauth 메소드에서 객체를 만들면 암호 및 전자 메일 유효성 검사를 건너 뛰려면 어떻게해야합니까?

감사합니다.

답변

0

나는 여기서 문제는 사용자의 두 인스턴스가 있고, 하나는 omniauth_login이 'true'로 설정되어 있고 다른 하나는 그렇지 않은 것입니다. 첫 번째는

user = User.new 
user.omniauth_login = 'true' 

로부터 입수되는 두번째

User.create_with_omniauth(auth) 

이다. 여기에서 생성 된 두 번째 인스턴스는 omniauth_login이 'true'로 설정되어 있지 않으므로 유효성 검사를 계속 실행합니다. 이 대신

user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) ||   
User.create_with_omniauth(auth) 

및 create_with_omniauth에서

, user.omniauth_login = 'true' 를 추가하십시오.

관련 문제