2011-10-22 2 views
3

레일즈 튜토리얼을 따르고 있으며 내 사이트에 가입 한 후 로그인하려고합니다. 최근에 내 앱에서 이메일 주소를 대문자로 사용하는 경우 잘못된 사용자 이름/비밀번호가 표시됩니다. 메시지. Rubular에서 정규식을 테스트했고 대문자 사용으로 작동하지 않습니다.Rails 튜토리얼이 작동하지 않음

세션과 관련이있을 수 있습니까?

email_regex = /\A[\w+\-.][email protected][csupomona\d\-.]+[edu]+\z/i 

    validates :email, :presence => true, 
         :format  => { :with => email_regex }, 
         :uniqueness => { :case_sensitive => false } 

다음은 그 정규식가 무엇인지에 대해 조금 혼란스러워

def create 
     user = User.authenticate(params[:session][:email], 
          params[:session][:password]) 
    if user.nil? 
     flash.now[:error] = "Invalid email/password combination." 
     @title = "Sign in" 
     render 'new' 
    else 
     sign_in user 
     redirect_to root_path 
    end 
    end 

답변

5

이것은 유효성 검사와 관련이 없습니다. 는 이메일 주소가 데이터베이스 (assumedly 일부 대문자, 일부 소문자)에 저장되는 방법

  1. 와 함께 할 것입니다
  2. 어떻게 User.authenticate 작업 (나는 그것이 User.find_by_email 않는 가정)

질문을 보면, 나는 실제로 이것이 문제가되지 않았습니다.

그러나이를 해결하기 위해 몇 가지 방법이 있습니다.

    스토어 모든 이메일 소문자
  1. User.authenticate이 같은
  2. User.authenticate는 대소 문자를 구분하지 있는지 확인 할 수 있도록.

그러나 User.authenticateDevise 또는 유사한 것으로 표시된다는 느낌이 들었습니다. 그래서 1. 최선의 해결책이 될 수 있습니다.

class User 

    # all email writes get lowercased 
    def email=(value) 
    self[:email] = value && value.downcase 
    end 

end 

user = User.authenticate(params[:session][:email].try(:downcase), ...) 
+0

세부 설명에 진심으로 감사드립니다! 나는 방법 # 2를 시도했고 효과가 있었다. 나는 이것에서 많은 것을 배웠다, 고마워! – Tony

5

생성/세션에 대한 코드입니다. 이 부분을 살펴 보겠습니다.

validates :email, :presence => true, 
        :format  => { :with => email_regex }, 
        :uniqueness => { :case_sensitive => false } 

정규식은 어디에 사용됩니까? :format에 사용되고 있기 때문에 정규식은 들어오는 전자 메일 주소가 유효한 전자 메일 주소처럼 보이고 고유성과 아무 관련이 없는지 확인하는 데에만 사용됩니다. validates에 대한 :uniqueness 매개 변수는 고유 한 이메일 주소를 보장 할 때 대소 문자를 고려해서는 안됩니다. 따라서 이메일 주소가 대소 문자 만 다른 두 명의 사용자를 가질 수 없습니다.

누군가에게 로그인하려고 할 때 문제가있는 곳에서 이메일 주소를 비교하는 방법에 대해 언급 한 코드는 없습니다. 이메일 주소에 대소 문자를 구분하지 않고 검색하려면 User.authenticate 클래스 메소드를 업데이트해야합니다.

+0

매우 유용한 정보. 자세한 설명을 해주셔서 감사드립니다. 기대했던 것보다 더 많은 것을 얻었습니다! – Tony

관련 문제