문제

Railstutorial 인증 메커니즘을 리팩터링하려고 합니다.

내 Rails 버전은 3.2.0이고 Ruby 1.9.3-p0 및 postrgresql 9.1을 사용하고 있습니다.

지금까지 로그인 시도가 실패했지만 로그인에 성공하면 테스트가 통과되었습니다.(이유는 이전 로그인 메커니즘을 리팩터링해야 하기 때문입니다)

내 세션 도우미 sign_in 함수는 다음과 같습니다.

def sign_in(employee)
  cookies.permanent.signed[:remember_token] = [employee.id, employee.salt]
  self.current_employee = employee
end.

sign_in 함수에서 즉시 확인되는 한 가지 문제는 has_secure_password가 이미 암호화 및 솔트 등을 처리한다는 것입니다.내 생각은 아마도 Employee.salt 대신에 Password_digest를 사용해야 한다는 것이었지만 그것도 실패했습니다.

내 쿠키가 2시간 후에 만료되도록 하고 싶습니다.api.rubyonrails.org의 쿠키 아래에서 이 옵션을 찾았습니다.

 cookies[:key] = {
                  value => "employee.id, employee.salt",
                  expires => 2.hours.from.now
                  }

제가 가지고 있는 또 다른 질문은 has_secure_password에 이미 인증 방법이 있다는 사실과 관련이 있습니다. 즉, Rails 튜토리얼의 직원 모델(사용자 모델)에 정의된 인증 정의를 사용할 필요가 없다는 뜻입니다. 하지만 주석을 달 때 밖으로 나가면 다음과 같은 깃발이 보입니다.

NoMethodError: undefined method 'authenticate'

내 세션 컨트롤러 생성 작업은 다음과 같습니다.

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

Employee.authenticate가 문제인 것 같습니다.

그래서 본질적으로 세 가지 질문이 있으며 그 질문은 다음과 같습니다.

Rails 튜토리얼에서는 직원 비밀번호에 솔트 등을 암호화하고 적용하는 상당히 긴 프로세스를 진행합니다.has_secure_password가 이미 처리했으므로 암호화된 비밀번호를 캡처하는 함수나 인수에 어떤 변수를 전달해야 합니까?

다음 질문은 쿠키 만료와 관련이 있으며, sign_in 함수에서 이를 어떻게 사용합니까?

마지막으로, 레일즈가 진짜 방법으로 인식할 수 있도록 인증 방법을 어떻게 사용하나요?

기록을 위해 Railsguide, api.rubyonrails.org 및 SO에 대한 이와 유사한 기타 질문을 검색했습니다.물론 이것은 제가 원리에 대한 이해가 부족하다는 점을 지적하는 것일 뿐이지만, 저는 배우고 있고 방향을 잘 잡고 있습니다.

저와 공유해 주실 수 있는 생각, 제안, 자료에 감사드립니다.

업데이트has_secure_password에서 API를 다시 읽고 인증은 암호화되지 않은 비밀번호라는 하나의 인수만 사용합니다.그래서 제가 할 일이 있어요.

나는 아직도 당신이 제공할 수 있는 도움이나 생각, 제안이 필요합니다.감사해요.

업데이트세션 시간 초과를 다루는 다음 기사를 찾았습니다.http://madkingsmusings.blogspot.com/2011/05/session-timeouts-on-rails.html나는 여전히 그것이 나를 위해 작동하도록 할 수 있는지 알아보기 위해 노력하고 있지만 이는 Railstutorial에 맞게 조정되었습니다.다른 질문에 대해서는 Michael Hartl이 Ruby on Rails 튜토리얼의 두 번째 버전을 작성하느라 바쁘고 해당 버전에서는 has_secure_password를 다룰 예정입니다.

도움이 되었습니까?

해결책

RailStutorial의 새 버전을 사용할 수 있습니다.

첫 번째와 마지막 질문 질문에 대해 ... 인증을 매우 간단하게 찾을 수 있습니다. 사용자 모델 :

has_secure_password
.

SessionController :

  def create
    user = User.find_by_email(params[:session][:email])
    if user && user.authenticate(params[:session][:password])
      sign_in user
      redirect_back_or user
    else
      flash.now[:error] = 'Invalid email/password combination'
      render 'new'
    end
  end
.

Sessionshelper :

def sign_in(user)
  cookies[:remember_token] = user.remember_token
  current_user = user
end
.

그것은 분명해야했지만 github에서 코드를 찾는 것에 대해서도 생각도하지 않았습니다.어쩌면 다른 누군가가 링크를 알게 될 것입니다. github의 Hartl의 2 번째 버전 sample_app 소스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top