-
Notifications
You must be signed in to change notification settings - Fork 0
26 OAuth 회원가입과 동시에 로그인
YeongBaeeee edited this page May 17, 2017
·
1 revision
- OpenID 로 개발된 표준 인증 방식
- 각 서비스 별로 제 각각인 인증방식을 표준화한 인증방식
- 인증을 공유하는 애플리케이션끼리는 별도의 인증이 필요없음.
- django-allauth
- django-oauth-toolkit
- python-social-auth
- 라이브러리 설치 : pip3 install "django-allauth==0.31.0"
- 0.31.0 버전을 기준으로 작성 (2017년 3월 기준, 최신버전)
- 다양한 로그인 방법 (Provider) 지원 #doc
- daum, kakao, naver, facebook, google, linkedin 등
- 적용할 Provider를 settings/INSTALLED_APPS 에 추가하고, admin 페이지를 통해 SocialApplication 등록 (client key/secret)
아래 설정을 추가한 후에, migrate 필요
#앱 등록및 사용할 Provider 등록
INSTALLED_APPS = [
# 중략
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook',
'allauth.socialaccount.providers.kakao',
'allauth.socialaccount.providers.naver',
]
AUTHENTICATION_BACKENDS = [ 'django.contrib.auth.backends.ModelBackend', # 기본 인증 백엔드
'allauth.account.auth_backends.AuthenticationBackend', # 추가
]
# 디폴트 SITE의 id
# 등록하지 않으면,각 요청 시에 host명의 Site 인스턴스를 찾습니다.
SITE_ID =1
# 이메일 확인을 하지 않음.
SOCIALACCOUNT_EMAIL_VERIFICATION = 'none' # 아니면 smtp 로 설정
urlpatterns = [
url(r'^accounts/', include('allauth.urls')),
]
- 주의 : include 시에는 url pattern 끝에 $를 붙이면 안됨
세팅된 Provider별 설정현황을 social_app 속성으로 지정
from django.contrib.auth.views import login as auth_login
from allauth.socialaccount.models import SocialApp
from allauth.socialaccount.templatetags.socialaccount import get_providers
from .forms import LoginForm
def login(request):
providers = []
for provider in get_providers():
# social_app속성은 provider에는 없는 속성입니다.
try:
provider.social_app = SocialApp.objects.get(provider=provider.id, sites=settings.SITE_ID)
except SocialApp.DoesNotExist:
provider.social_app = None
providers.append(provider)
return auth_login(request,
authentication_form=LoginForm,
template_name='accounts/login_form.html',
extra_context={'providers': providers})
{% extends "accounts/layout.html" %}
{% load socialaccount %}
{% block content %}
<form action="" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" />
</form>
<h3>Social Login</h3>
<ul>
{% for provider in providers %}
<li>
{% if provider.social_app %}
<a href="{% provider_login_url provider.id %}">
{{ provider.name }}
</a>
{% else %}
<a>
Provider {{ provider.name }} 설정이 필요합니다.
</a>
{% endif %}
</li>
{% endfor %}
</ul>
{% endblock %}
accounts/templates/accounts/profile.html
<img src="{{ user.socialaccount_set.all.first.get_avatar_url }}" />
https://developers.facebook.com/
- facebook for developers 에서 "새 앱" 등록
- 새로이 생성된 앱의 app_id, app_secret 키를 복사
- "Facebook 로그인" 설정에서 "유효한 OAuth 리다이렉션 URI" 세팅
- 로그인을 수행할 사이트의 호스트명을 다수 입력
- ex) http://localhost:8000
- 장고 admin 페이지에서 Facebook Provider에 대해, 새로운SocialApp 으로서 등록
https://developers.naver.com
NAVER Developers :: 내 애플리케이션 내, 지정 애플리케이션 -> 설정
- "로그인 오픈 API" 활성화
- 이용목적 : "로그인 오픈 API (네이버 아이디로 로그인)" 체크
- 로그인 오픈 API 서비스 환경 : "웹" 체크
- PC 웹
- 서비스 URL : http://localhost:8000
- 네이버 아이디로 로그인 Callback URL : http://localhost:8000/accounts/naver/login/callback/
- PC 웹
- 애플리케이션 개발 상태 : 릴리즈 시에 "서비스 적용" 체크
- "개발 중" 상태일 경우, 로그인 가능한 아이디 제한 (최대 20개)
https://developers.kakao.com
Kakao Developers / 내 애플리케이션에서 앱 등록
- 특이사항 : 카카오 oauth 설정에서는 시크릿키는 없습니다.
- 사이트 도메인에 다음 추가
- http://localhost:8000
- 그리고, 실제 서비스 주소