문제

내 Rails 앱에는 "기억하기" 확인란이 있는 로그인 상자가 있습니다.해당 상자를 선택한 사용자는 브라우저를 닫은 후에도 로그인 상태를 유지해야 합니다.사용자 세션에 ID를 저장하여 사용자가 로그인했는지 여부를 추적하고 있습니다.

그러나 세션은 Rails에서 지속되지 않는 세션 쿠키로 구현됩니다.저 할 수 있어요 만들다 그들은 끈질기게:

class ApplicationController < ActionController::Base
  before_filter :update_session_expiration_date

  private

  def update_session_expiration_date
    options = ActionController::Base.session_options
    unless options[:session_expires]
      options[:session_expires] = 1.year.from_now
    end
  end
end

하지만 이는 해킹처럼 보이며 이러한 일반적인 기능에 비해 놀라운 일입니다.더 좋은 방법이 있나요?

편집하다

Gareth의 답변은 꽤 훌륭하지만 여전히 Rails 2에 익숙한 사람의 답변을 원합니다. CookieSessionStore).

도움이 되었습니까?

해결책

나는 이것에 대해 한동안 생각했고 몇 가지 결론에 도달했습니다.Rails 세션 쿠키는 기본적으로 변조 방지 기능이 있으므로 클라이언트 측에서 쿠키가 수정되는 것에 대해 걱정할 필요가 없습니다.

내가 한 일은 다음과 같습니다.

  • 세션 쿠키는 오래 지속되도록 설정됩니다(6개월 정도).
  • 세션 스토어 내부
    • 로그인 + 24시간으로 설정된 '만료 날짜'
    • 사용자 ID
    • Authenticated = true이므로 익명 사용자 세션을 허용할 수 있습니다(쿠키 변조 방지로 인해 위험하지 않음).
  • 세션의 '만료일' 부분을 확인하는 Before_filter를 Application Controller에 추가합니다.

사용자가 "기억하기" 상자를 선택하면 세션[:expireson] 날짜를 로그인 + 2주로 설정했습니다.Rails 세션 쿠키는 변조 방지 기능이 있으므로 누구도 쿠키를 훔쳐 영원히 로그인 상태를 유지하거나 다른 사용자로 가장할 수 없습니다.

다른 팁

세션 쿠키가 오래 지속되도록 확장하면 안 됩니다.

레일을 특별히 다루지는 않지만 이 기사 '기억하기' 모범 사례를 설명하기 위해 다소 길게 설명합니다.

요약하면 다음을 수행해야 합니다.

  • 큰 임의의 값을 허용하려면 사용자 테이블에 추가 열을 추가하세요.
  • 사용자 ID와 임의의 값을 결합하여 클라이언트에 오래 지속되는 쿠키를 설정합니다.
  • 새 세션이 시작되면 ID/값 쿠키가 있는지 확인하고 일치하면 새 사용자를 인증합니다.

또한 저자는 로그인할 때마다 무작위 값을 무효화하고 쿠키를 재설정할 것을 권장합니다.개인적으로 나는 두 대의 컴퓨터에서 사이트에 계속 로그인할 수 없기 때문에 그것을 좋아하지 않습니다.나는 비밀번호 변경 기능이 임의의 값을 재설정하여 다른 컴퓨터의 세션을 잠그는 경향이 있습니다.

마지막으로, 자동 인증 세션에서 특정 기능(비밀번호 변경/이메일 변경 등)을 사용할 수 없도록 하는 것에 대해 그가 제공하는 조언은 따를 만한 가치가 있지만 실제 세계에서는 거의 볼 수 없습니다.

이를 구현한 RESTful_Authentication 플러그인을 살펴보거나 RESTful Authentication_plugin을 사용하도록 구현을 전환하는 것이 좋습니다.Railscasts에는 이 플러그인을 사용하는 방법에 대한 좋은 설명이 있습니다.

Railscasts #67 Restful_authentication

다음은 플러그인 자체에 대한 링크입니다.

편안한 인증

Restful_authentication 플러그인은 이를 잘 구현합니다:

http://agilewebdevelopment.com/plugins/restful_authentication

세션을 유지하고 싶지 않고 ID만 유지하고 싶습니다.그들이 귀하의 사이트로 돌아올 때 새로운 세션을 생성하게 됩니다.일반적으로 사용자에게 GUID를 할당하고 쿠키에 기록한 다음 사용자가 돌아올 때 이를 조회하는 데 사용합니다.쉽게 추측할 수 있고 교활한 방문자가 다른 사용자의 계정을 탈취할 수 있으므로 토큰에 로그인 이름이나 사용자 ID를 사용하지 마십시오.

이것은 30일 지속 세션을 생성한 한 사람의 경험을 아주 훌륭하게 기록한 것입니다.

경고:블로그 게시물은 2006년의 것입니다.

http://grahamglass.blogs.com/main/2006/05/rails_sessionsr.html

이것은 나에게 매력처럼 작용했습니다.

http://squarewheel.wordpress.com/2007/11/03/session-cookie-expiration-time-in-rails/

이제 내 CookieStore 세션은 2주 후에 만료됩니다. 따라서 사용자는 앞으로 2주 동안 지속적으로 로그인하려면 로그인 자격 증명을 다시 제출해야 합니다.

기본적으로 다음과 같이 간단합니다.

  1. Vendor/plugins 디렉토리에 하나의 파일 포함
  2. 한 줄만 사용하여 애플리케이션 컨트롤러에서 세션 만료 값 설정

나는 레일에 대한 뛰어난 인증 솔루션을 위해 Devise를 선택할 것입니다.

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