2009-05-25 2 views
1

경고 :이 중 일부는 매우 잘못 될 수 있으므로 제 가정이 정확하지 않은 경우 알려주십시오. 내가 로그인에 편안한 인증을 사용하고레일 (ActiveRecord 세션 및 안정 인증) : 세션 테이블에 언제 기록됩니까?

:

는 여기에 내가 달성하기 위해 노력하고있어입니다. 그러나, 내 UI에 flex/ruby_amf를 사용하고 있기 때문에 Flex에서 각 연결을 개별적으로 인증해야합니다.

내가 그렇게하기로 결정한 방법은 로그인 화면을 삽입 된 플래시 페이지로 리디렉션하고 session-id를 flashvar로 삽입하는 것입니다. 플래시 응용 프로그램은 모든 요청과 함께 session-id를 보내고 관련 컨트롤러의 before 필터는 session-id로 식별 된 세션과 연관된 사용자가 로그온했는지 확인합니다.

사용자를 세션에 연결하는 방법은 세션 테이블에 'user_id'열을 추가하고 로그인 함수에서 호출 한 sql "update sessions set user_id ... '"유형 쿼리를 수행하는 것입니다.

그러나 user_id는 사용자가 2 번째로 로그인 할 때만 업데이트됩니다. 약간 조사한 결과 세션 테이블의 레코드가 로그인 기능 실행 중에 아직 없음을 알 수있었습니다.

그래서,이 시점에 이르기까지 말이, 그리고에 대한 모범 사례 등 다음 내 질문은 준수 경우 :

세션 테이블의 레코드 시간에 어떤 시점 생성에를? 로그인 함수에서 세션 객체를 업데이트하고 레일즈가 user_id를 데이터베이스에 쓰도록 할 수 있습니까?

레일 세션의 동작은 나에게 진정한 수수께끼입니다. 나는 어떤 도움을 주셔서 감사합니다.

감사합니다.

+0

추신 : 여기에 세션 테이블 업데이트에 대한 토론이 있습니다. http://www.nabble.com/Rails-2.3-Sessions-td22720164.html – krispyfi

+0

확인해 보니 문제를 조금 더 조사했습니다. 그리고 내가 생각해 보았던 틀린 가정 중 하나는 세션 객체가 세션 테이블의 한 행에 해당한다는 것입니다. 나는 session [: user_id] = Users.authenticate (name, pass)를 수행하고 session.save를 수행하여 DB에 쓸 수 있기를 바랬다. 실제로 (내가 틀렸다면 정답!) 세션 객체는 데이터 형식으로 인코딩 된 형태로 나타납니다. 내가하는 일은 기본적으로 올바른 것이라고 말하는 또 다른 링크가 있습니다. http://scottiestech.info/2009/04/02/rails-23-how-to-access-custom-columns-in-the- 세션 테이블 / – krispyfi

답변

1

Rails 2.3에서는 랙 응용 프로그램이 처리를 마친 후에 세션이 저장됩니다. 전통적인 Rails 애플리케이션에서 이것은 필터, 컨트롤러 동작, 뷰 렌더링 및 애프터 필터 전에 요청이 완전히 처리 된 후입니다. actionpack/lib/action_dispatch/vendor/rack-1.1.pre/rack/session/abstract/id.rb을보십시오.

당신이 그것에 대해 생각한다면,이 말이 완벽합니다. 세션에 무언가를 배치 할 때마다 세션을 상점에 쓰면 많은 추가 오버 헤드가 발생합니다.

It 's Rails, 그래서 당신이 충분히 그것을 혼란시키고 싶다면, 당신이 원하는 언제든지 저장할 세션을 작성하는 방법을 monkeypatch 할 수 있습니다. 나는 그것을 추천하지 않는다. Rails가 발전함에 따라 코드를 계속 수정해야합니다.

ActiveRecord :: SessionStore의 경우 한 행이 하나의 세션에 매핑되는 것이 옳습니다. data 열은 세션에 넣은 모든 개체의 인코딩 된 형식입니다. 요청이 들어올 때마다 Rails는 이전에 저장 한 모든 객체의 새 인스턴스를 생성하여 존재했던 세션을 재구성해야합니다.