django-allauth 설치
라이브러리를 사용하기 위해 sites 프레임워크 사용이 필수이다.
- 소셜 앱 설정을
SocialApp테이블에 저장 (예: Facebook app ID/secret)- provider
- name
- client_id
- secret
- key
- sites (ManyToMany)
- 소셜 앱 설정은 일반적으로 실행중인 도메인과 연결되어 있으므로 도메인 당 앱이 필요
- 단일 사이트의 경우라도 두 개의 도메인이 필요 (development, production)
INSTALLED_APPS = [
# The following apps are required:
'django.contrib.sites',
]
SITE_ID = 1
에러 해결
문제
SITE_ID를 설정하지 않고 localhost:8000/admin/ 페이지 접속하니, Site matching query does not exist. 에러가 발생한다.
왜?
django.contrib.sites를 설정 후 DB를 마이그레이션 하면 django_site라는 테이블이 생긴다. 이 모델은 웹사이트의 domain과 name 속성을 저장한다.
domain: 웹사이트와 관련된 정규화 된 도메인 이름 (기본: www.example.com)name: 사림이 읽기 편한 웹사이트 “verbose” 이름
SITE_ID 설정은 Site 객체의 데이터베이스 ID를 지정한다. 만약 이 설정을 생략하면, request.get_host() 메서드가 가져온 호스트 이름의 domain과 비교하여 get_current_site() 함수가 현재 사이트를 가져오려고 시도한다.
그런데 Site 테이블에 localhost가 없기 때문에 현재 사이트를 가져올 수 없어 에러가 발생한다.
SITE_ID=1로 지정하고 localhost:8000/admin/ 페이지 접속하면 정상적으로 동작한다.
admin 페이지에 로그인 후, sites 메뉴에서 localhost를 등록한다. 그 후 SITE_ID=1를 제거하면 정상적으로 동작한다.