2012-08-28 3 views
2

에서 내가 고안 내 사용자 모델의 인증을 가지고 있고 나는? (암호)을 고안

class User < ActiveRecord::Base 
    devise :database_authenticatable 

    # overwriting the valid_password from database_authenticatable 
    module PostDatabaseAuthenticatable 

    def valid_password?(password) 
    if old_password 
     # do something new 
    else 
     # call valid_password from DatabaseAuthenticatable 
     super 
    end 
    end 

    end 

    include PostDatabaseAuthenticatable 

end 

이 클래스 정의 안에 내 user.rb,이 같은 valid_password 방법을 덮어 쓰려면 그래서 먼저 데이터베이스를 통해 데이터베이스 권한을 포함 시키십시오. devise를 통해 PostDatabaseAuthenticatable을 포함 시키십시오. 따라서 Rails 3: alias_method_chain still used?을 읽으면 devise의 valid_password 메소드를 완전히 덮어 씁니다.

하지만 내 코드를 실행할 때 항상 먼저이 코드를 호출 한 다음 호출하는 코드를 호출하지 않으므로 코드를 전혀 덮어 쓰지 않습니다.

왜 그런가?

답변

0

super은 Devise의 메소드를 호출합니다. 이 코멘트 상자에 줄 수있는 더 나은 설명을 보시려면 여기를보십시오. ->http://rubylearning.com/satishtalim/ruby_overriding_methods.html

+0

이들은 모두 클래스 메소드 오버 라이드입니다. 모듈 메소드는 겹쳐 쓰여집니다. – Matilda

+1

왜 ' valid_password?'는'User' 클래스 자체에 있습니까? 여기에 모듈로있을 필요는 없습니다. – RipTheJacker

+0

실제로 그게 내가 한 일이야. – Matilda

1

실제로이 모든 작업이 진행 중입니다. 잘못 디버깅하고있었습니다. 또한 모듈 오버라이드가 필요하지 않습니다. valid_password (비밀번호) 메소드를 작성하는 것만으로도 사용자 클래스를 구현할 수 있습니다.

+0

나는 또한 노력하고 있지만 나를 위해 일하고 있지 않습니다. 비밀번호 인증없이 로그인해야한다는 것은 사용자 이름으로 만 로그인한다는 의미입니다. –

+0

'valid_password?'메소드는 유효한 이메일이나 사용자 이름이있을 때에 만 호출됩니다. 아마 당신은 틀린 것을 시험하고 있습니까? –