2010-06-02 6 views
2

Google이 강제로 단일 사용자를위한 세션을 하나만 만들 수 있습니까?Google 계정의 사용자에 대해 단일 세션 제한

GAE에서 사용자를 인증하기 위해 Google ID를 사용하는 서비스를 만들었습니다. 이제 단일 사용자가 자신의 사용자 이름/암호를 공유하여 여러 대의 PC에서 여러 개의 세션을 만드는 중입니다. 나는 이것을 제한하고 싶다.

성공적인 로그인 후 응용 프로그램은이 사용자에 대해 다른 모든 세션을 로그 아웃해야합니다.

gmail에는 페이지 하단에 마지막 활동 세부 정보 링크가 있습니다. 세부 정보를 클릭하면 현재 세션이 표시되고 세션도 로그 아웃 할 수있는 옵션이 제공됩니다. 프로그래밍 방식으로 동일한 기능을 원합니다.

하나 이상의 옵션이 있습니다. 로그인하기 전에 사용자가 이미 로그온했는지 여부를 감지하십시오. ?

이 정보가 어떻게 든 액세스 할 수있는 경우에 나는 적절한 조치를 취할 수 있습니다 동시 세션

을이

http://mail.google.com/support/bin/answer.py?ctx=%67mail&answer=45938

살펴 볼 되세요.

답변

3

확실히 가능합니다.

Google 계정을 사용하여 인증하는 경우 사용자는 자격 증명을 Google에 게시하여 로그인하고 Google은 사용자의 브라우저에 쿠키로 저장된 인증 토큰을 사이트에 반환합니다. 토큰은 쿠키가 만료 (기본적으로 24 시간)되거나 사용자가 로그 아웃 할 때까지 유효합니다.

여러 로그인 세션을 추적하려는 경우 로그인 또는 로그 아웃 후 실행하도록 설계된 처리기를 작성할 수 있습니다. 정상적인 로그인 후 반환 URL이 "/ do_stuff"인 경우이를 "/ finish_login? next = % 2Fdo_stuff"로 변경할 수 있습니다. 이 핸들러에서 세션을 나타내는 데이터 저장소에 Google 계정, 로그인 한 IP 주소 및 로그인 타임 스탬프 (현재 타임 스탬프)와 함께 엔티티를 만들 수 있습니다. 사용자의 브라우저에서 세션 엔티티 키를 다른 쿠키에 쓸 수 있습니다. 완료되면 '다음'URL로 리디렉션합니다.

로그 아웃 후 세션 엔티티 키 쿠키를 확인하고 엔티티를 삭제하고 쿠키를 삭제하는 비슷한 처리기를 사용할 수 있습니다.

사용자가 여러 위치에서 로그인했음을 표시하려면 Google 계정과 연결된 세션 엔터티가 24 시간 미만 (또는 쿠키 만료 날짜)으로 설정되어 있는지 쿼리합니다.

다른 세션에서 원격으로 로그 아웃하려면 webapp.util에서 Google이 제공하는 login_required 데코레이터의 고유 버전을 작성해야 할 수 있습니다.귀하의 버전은 사용자가 로그인되어 있는지 확인하고, 세션 키 쿠키가 전송되었는지 확인하고, 관련 엔티티가 여전히 존재하며 올바른 계정이 소유하고 있는지 확인해야합니다.

+0

+1 좋은 설명입니다. 그러나 세션을 처리하기위한 코드를 작성하는 것은 시간이 오래 걸리는 것 같습니다. 더 간단한 방법이 있습니까? Google이 제공하는 관련 API로 현재 사용자에게 몇 개의 동시 세션이 생성되었는지 확인할 수 있습니까? – Manjoor

+0

AFAIK이 기능은 공식 API에서 노출되지 않습니다. 유사한 동작을 제공하는 오픈 소스 라이브러리가 있을지 모르겠지만, 나는 어떤 것도 모릅니다. –

2

Google App Engine 데이터 서비스에 로그인 세부 정보를 저장할 수있는 방법은 없습니다. 따라서 사용자의 모든 로그인 세부 정보를 관련 객체에 저장할 수 있습니다. 결과적으로 GAE와 전통 웹 응용 프로그램간에 차이가 없다고 말할 수 있습니다. 웹 프런트 엔드에서 처리하도록하는 대신 데이터베이스에 로그인 정보를 저장한다는 점만 제외하면 말입니다.

+0

음 알아. 내 질문은 같은 ID를 사용하여 여러 위치에서 여러 로그인을 복원하는 것입니다. 또는 새로운 세션이 생성 될 때 다른 기록 된 세션을 삭제합니까? – Manjoor

+0

이해가 안되네 ... 그런 코드 예를 들고 싶니? 둘 중 하나를 선택 하시겠습니까? – Riduidel

관련 문제