2011-05-11 1 views
3

레거시 데이터베이스 기반의 인증 백엔드가 있습니다. 누군가 해당 데이터베이스를 사용하여 로그인하고 해당 User 레코드가 없으면 하나를 만듭니다. 장고 시스템에이 사실을 경고하는 방법이 있다면 궁금합니다. 예를 들어 새로운 사용자를 다른 페이지로 리디렉션 할 수 있습니다.Django에서 백엔드 인증을 통해 생성 될 때 새로운 사용자 표시

내가 생각할 수있는 유일한 점은 사용자의 프로필 레코드에 is_new과 같은 플래그를 추가하는 것입니다.이 테스트는 한 번 테스트 된 다음 리디렉션되는 즉시 False으로 설정됩니다.

기본적으로 나는 누군가가 이것을 알아 냈는지 궁금해서 휠체어를 재발견 할 필요가 없습니다.

+0

나는 당신의 솔루션이 잘 작동한다고 말할 것이다. 나중에 다른 인증 백엔드를 추가 할 수 있도록 플래그를 설정하는 트리거를 사용할 수도 있지만 잔인 할 수 있습니다. –

답변

1

내가 수행 한 가장 쉬운 방법은 이전과 똑같은 방법이라고 생각했습니다. 내 프로젝트 중 하나에 비슷한 요구 사항이있었습니다. 우리는 처음으로 프로필을 방문 할 때까지 새로운 회원에게 "귀하의 프로필을 업데이트하는 것을 잊지 마십시오"라는 메시지를 보여줄 필요가있었습니다. 클라이언트는이를 빨리 원했고 사용자 프로필에 'visited_profile'필드를 추가하고 False로 기본값을 설정했습니다.

우리는 구현이 매우 빠르며 등록 프로세스를 고칠 필요가 없으며 기존 사용자와 함께 작업했으며 사용자 및 사용자 프로필을 검색 할 때마다 페이지로드가 추가로 필요하지 않았기 때문에이 문제를 해결했습니다. 이미 모든 페이지에서). 필드를 추가하고 South 마이그레이션을 실행하고 if 태그를 템플릿에 넣으려는 10 분의 시간을 모두 가져갔습니다.

1

이 객체가 생성되었는지 확인하기 위해 내가 알고있는 두 가지 방법이있다 :

1) get_or_create 튜플이 created이 객체가 만들어 졌는지 여부를 분명히 충분히 나타내는 부울입니다 형태 (obj, created)의 반환을 사용하는 경우 또는 아니요

2) post_save 신호는 created 매개 변수를 부울 값으로 전달하며 객체가 생성되었는지 여부도 나타냅니다.

가장 간단한 수준에서 두 가지 후크 중 하나를 사용하여 세션 var를 설정할 수 있습니다. 그러면 세션 var를 확인하고 그에 따라 리디렉션 할 수 있습니다.

함께 할 수있는 경우 get_or_create 또는 post_save 신호를 호출 한 후 직접 리디렉션 할 수도 있습니다.

+0

이 세 가지 시나리오의 문제점은 누구도 인증 된 뷰로 정보를 보내지 않는다는 것입니다. –

+0

자체적으로는 없습니다. 그러나 세션 저장소에 값을 추가하면보기의 세션에서 해당 값에 액세스 할 수 있습니다. –

+0

이 경우에는 세션 저장소에 대한 액세스 권한이 없다고 생각합니다. 요청이 필요하기 때문에 (이 경우 해킹이 있지만 여전히 있지만) '로그인'신호에 대해서만 제공됩니다.이 시점에서 너무 늦었습니다 . –

-1

파일 기반 캐시를 사용하여 아직 데이터베이스에 저장되지 않은 사용자를 저장할 수 있습니다. 사용자가 두 번째로 로그인하면 캐시를보고 사용자 개체를 찾은 다음이를 데이터베이스에 저장할 수 있습니다. http://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs

PS :

여기 장고 캐싱에 대한 몇 가지 정보의 IT 컴퓨터 충돌의 상황에서 모든 정보를 삭제하거나 종료하기 때문에 Memcached가 사용하지 마십시오.

+0

asker는 이미 DB에서 새로운 사용자를 생성하는 코드를 가지고 있으며 django가 기존 사용자를 사용했는지 또는 새로운 사용자를 생성했는지 알고 싶습니다. 여분의 필드를 추가하거나 post_save 신호를 사용하는 것이 훨씬 쉬워 보입니다. – acidjunk