2009-10-17 3 views
12

나는 두 사이트에서 foo.com 및 bar.com을 말하고 있으며 모두 장고를 기반으로합니다. 1 차 등록은 foo.com에서 발생합니다 (기본 사용자 DB가 여기에 있어야합니다). 다음과 같은 세 가지 일이 발생하기를 원합니다.(Django) 다른 도메인에있는 두 사이트의 인증 공유

1) foo.com에 로그인 한 사용자는 자동으로 액세스 할 수 있습니다 bar.com 다시 로그인하지 않고

2) bar.com에 직접 로그인하는 사용자는 foo.com 사용자 db에 대해 인증됩니다.

3) 사용자가 bar.com에 직접 등록 할 필요가 없습니다.

어떻게하면됩니까? 그것이 내가 bar.com을 foo.com (예. bar.foo.com)의 하위 도메인으로 만들 수있는 것들을 크게 단순화 시키지만 그들은 별도의 사이트 여야합니다.

답변

5

3 번째 요구 사항은 쉽게 따라서 동일한 사용자 테이블을 가진 (두 사이트 사이에 동일한 데이터베이스를 공유함으로써 해결 될 수있다.

제 1 회 요구 사항으로 인해 도메인 간 문제의 까다 롭습니다 (세션 쿠키는 공유되지 않습니다 .)

은 당신이 정말 찾고있는 것은 Single Sign On (SSO) 당신이 django-openid을 고려해 볼 수 있습니다 내가 당신을 위해 무엇을 찾고있는 것은 SESSION_COOKIE_DOMAIN 설정 생각

+2

# 2는 다른 데이터베이스에 직접 액세스하거나 서버 <=> 서버 채팅을 사용하여 두 가지 방법으로 수행 할 수 있습니다. John이 말했듯이, # 1이 주요 문제입니다. –

4

요구 사항에 따라 다릅니다. 가능한 경우 간단한 해결책은 두 사이트를 하나의 Django 인스턴스에 호스팅하는 것입니다. 다시 말해 Django 프로젝트는 두 사이트를 호스팅하지만 rewrite rulefoo.comhttp://localhost/foo/으로, bar.comhttp://localhost/bar/으로 매핑합니다. Django의 인증 시스템은이 시나리오에서 "그냥 작동합니다". 다시 쓰기 규칙은 물론 하위 도메인에도 적용 할 수 있습니다. 이 기술을 사용하여 수백 개의 하위 도메인을 호스팅하는 시스템을 구축했습니다.

이것이 옵션이 아닌 경우 다른 사람들이 언급 한대로 Django 인스턴스간에 데이터베이스를 공유하고 SESSION_COOKIE_DOMAIN 설정을 사용해야합니다.

+0

음, 왜 투표가 안되니? 이는 모두 동일한 데이터를 공유하는 하위 도메인 또는 도메인을 처리하는 완벽한 방법입니다. –

+0

당신의 잠재적 솔루션은 확실히 downvote를 보증하지 않습니다. –

+0

이것이 왜 투표가 중단 될지는 모르겠지만이 질문에 대한 꽤 좋은 답변처럼 보입니다. 정확하게 필요한 것 같습니다. 다행히도 이것은 장고 프로젝트 앞에 nginx와 함께 작동합니다 ... – paperreduction

4

나는 매우 비슷한 문제가 있었지만 OpenID는 나를위한 실행 가능한 해결책이 아니 었습니다. django> 1.2에 여러 데이터베이스가 출현함에 따라 사이트간에 세션 및 로그인 데이터를 공유하는 것이 매우 쉬워졌습니다. This blog post은 설정하는 방법을 잘 설명합니다. 바라건대 다른 사람들은 내가 한 것처럼 이것을 유용하다고 생각하기를 바랍니다.