사용자가 올바른 전자 메일 및 암호를 사용하여 데이터베이스에 존재하더라도 User.authenticate 메서드는 nil을 반환합니다. 이것은 세션 컨트롤러 또는 레일즈 콘솔 (irb)의 Create 액션에서 authenticate 메소드를 호출 할 때 발생합니다.User.authenticate 메소드가 Rails 3에서 nil을 반환합니까?
이 문제에 대한 도움을 주시면 대단히 감사하겠습니다. 서버 로그를 확인하는
class User < ActiveRecord::Base
attr_accessor :password
attr_accessible :first_name, :last_name, :email, :password, :password_confirmation,
:account_type, :email_confirmed, :weight
validates :password, :presence => true,
:confirmation => true,
:length => { :within => 6..40 }
before_save :encrypt_password
def has_password?(submitted_password)
encrypted_password == encrypt(submitted_password)
end
def self.authenticate(email, submitted_password)
user = find_by_email(email)
return nil if user.nil?
return user if user.has_password?(submitted_password)
end
def self.authenticate_with_salt(id, cookie_salt)
user = find_by_id(id)
(user && user.salt == cookie_salt) ? user : nil
end
private #################################################
def encrypt_password
self.salt = make_salt if new_record?
self.encrypted_password = encrypt(password)
end
def encrypt(string)
secure_hash("#{salt}--#{string}")
end
def make_salt
secure_hash("#{Time.now.utc}--#{password}")
end
def secure_hash(string)
Digest::SHA2.hexdigest(string)
end
def generate_email_conf_code
email_conf_code = secure_hash("#{Time.now.utc}")
self.email_conf_code = email_conf_code
end
end
당신은 그것을 좁히고'find_by_email (email)'또는'user.has_password? (submitted_password)'로 인해 nil을 반환하는지 결정한 적이 있습니까? – James
'nil'을 얻을 때'params'는 어떻게 생겼을까요? 그리고 일치시킬 이메일과 비밀번호는 무엇입니까? –
nil을 리턴하는 것은 user.has_password? (submitted_password)입니다. 나는 아직도 이유를 알 수 없다. 적절한 매개 변수가 user.authenticate에 제출됩니다. params를 디버그 페이지에 덤핑하여 확인했습니다. –