92번째 줄:
92번째 줄:
|네이버
|네이버
|
|
−
*[https://developers.naver.com/products/login/api/ 네이버아이디로 로그인] 서비스에서 오픈 API를 신청한다.
+
#[https://developers.naver.com/products/login/api/ 네이버아이디로 로그인] 서비스에서 오픈 API를 신청한다.
−
*callback url : http://http://127.0.0.1:8000/accounts/naver/login/callback/ 형태.
+
#callback url : http://http://127.0.0.1:8000/accounts/naver/login/callback/ 형태.
−
*소셜어플리케이션에서 얻은 클라이언트 아이디와 비밀키를 입력한다.
+
#소셜어플리케이션에서 얻은 클라이언트 아이디와 비밀키를 입력한다.
−
*등록할 때 이용가능한 사이트를 모두 선택해준다.(example.com 이라도 안해주면 에러가 난다.)
+
#등록할 때 이용가능한 사이트를 모두 선택해준다.(example.com 이라도 안해주면 에러가 난다.)
−
*로그인 버튼은 다음 [https://developers.naver.com/docs/login/bi/ 링크]에서 제공받을 수 있다.
+
#로그인 버튼은 다음 [https://developers.naver.com/docs/login/bi/ 링크]에서 제공받을 수 있다.
+
개발자 외 일반사용자의 로그인은 네이버의 인증을 받아야 한다.(사이트개발이 완전히 끝난 후에 로그인 과정 제출.)
|-
|-
|구글
|구글
−
|[https://console.developers.google.com/projectselector2/apis/dashboard?supportedpurview=project 구글 API 콘솔]에서 진행한다.
+
|준비물
−
API를 사용하기 위해선 프로젝트가 있어야 한다. 프로젝트를 만들고..
−
좌측 메뉴의 '사용자 인증 정보' 선택 > OAuth 클라이언트 ID를 만든다.
+
* 진행하기 전에 도메인에서 https:// 를 사용할 수 있어야 한다.
+
+
# [https://console.developers.google.com/projectselector2/apis/dashboard?supportedpurview=project 구글 API 콘솔]에서 진행한다. API를 사용하기 위해선 프로젝트가 있어야 한다. 프로젝트를 만들고..
+
# 좌측 메뉴의 '사용자 인증 정보' 선택 > OAuth 클라이언트 ID를 만든다.(웹어플리케이션으로.)
+
# 리다이렉션 url은 https://localhost:8000/accounts/google/login/callback/ 형태.
+
# 만들 때 ID와 비밀키를 주는데, 이들을 소셜어플리케이션에 등록한다.(비밀키는 처음에만 알려주고 곧 안나오게 될 수 있다. 지멋대로다 나왔다 안나왔다...)
+
# 로그인 버튼은 다음 [https://developers.google.com/identity/branding-guidelines#sign-in-button 링크]에서.
|-
|-
|카카오
|카카오
109번째 줄:
115번째 줄:
# API키를 신청한다.(https://developers.kakao.com/<nowiki/>에서) - 신청할 때 리다이렉트 url로 http://127.0.0.1:8000/accounts/kakao/login/callback/ 형태.
# API키를 신청한다.(https://developers.kakao.com/<nowiki/>에서) - 신청할 때 리다이렉트 url로 http://127.0.0.1:8000/accounts/kakao/login/callback/ 형태.
# admin의 소셜어플리케이션에서 클라이언트아이디에 REST API 키를 넣는다.(시크릿 키는 없다.)
# admin의 소셜어플리케이션에서 클라이언트아이디에 REST API 키를 넣는다.(시크릿 키는 없다.)
+
# 로그인버튼은 [https://developers.kakao.com/tool/resource/login 링크]에서 제공받을 수 있다.
+
|-
+
|페이스북
+
|사용하기 위해 <nowiki>https://를</nowiki> 사용할 수 있어야 한다.
+
+
# settings.py 의 INSTALLED_APPS 안에 'allauth.socialaccount.providers.facebook', 추가
+
# https://developers.facebook.com/apps/<nowiki/>에서 앱을 만든다.
+
# 앱 메뉴의 '페이스북 로그인 설정'에서 유효한 OAuth 리다이렉션에 [http://127.0.0.1:8000/accounts/kakao/login/callback/ http://127.0.0.1:8000/accounts/facebook/login/callback/]형태로 기입한다.
+
# <code>페이스북디벨로퍼>설정>기본설정</code>에서 앱ID와 비밀코드를 보여주는데, 이를 장고소셜로그인 앱에 등록한다.
+
# 로그인 버튼은 [https://developers.facebook.com/docs/facebook-login/web/login-button?locale=ko_KR 링크]에서 자바스크립트와 함께 제공된다.(자바스크립트를 사용한 버튼은... 이것저것 꼬이게 하니, 이미지만 따오도록 하자.)
+
|-
+
|애플
+
|
+
|}
+
+
==== 포기 ====
+
{| class="wikitable"
+
!서비스
+
!설명
+
|-
+
|인스타그램
+
|페이스북과 한 몸. 관련 앱 생성 후 리다이렉션 주소만 http://localhost:8000/accounts/instagram/login/callback/ 형태로 추가.
+
그러나... 인스타 자체에서 로그인으로 사용할 수 없다고 못박아 두어서... 하다가 포기.(22.12월 기준 API 요청이 계속 거부당한다. 아마 최신화가 되지 않은듯...?)
|}
|}
134번째 줄:
163번째 줄:
</div>
</div>
<ul class="socialaccount_providers">
<ul class="socialaccount_providers">
−
+
<!-- 프로바이더의 순서는 settings.py에 지정한 순서인 듯하다. -->
{% for provider in socialaccount_providers %}
{% for provider in socialaccount_providers %}
{% if provider.id == "openid" %}
{% if provider.id == "openid" %}
179번째 줄:
208번째 줄:
<br />
<br />
+
= 기타 기능 =
+
user.socialaccount_set.all().first() 안에 해당 제공자로부터 받아오는 각종 정보들이 담긴다. dir로 확인해 사용해보자.
+
+
이외 기존 회원과 소셜계정의 연결도 가능한 듯한데... 이상하게 안된다. 결국 스스로 머릴 써서 우회해서 구현했다.
+
+
대충 다음과 같은 속성들이 있다.<syntaxhighlight lang="html">
+
get_avatar_url. {{account.get_avatar_url}}
+
제공자. {{ account.provider }}
+
get_deferred_fields. {{ account.get_deferred_fields }}
+
get_profile_url. {{ account.get_profile_url }}
+
get_provider_account. {{ account.get_provider_account }} # 카카오, 네이버의 경우 닉네임을 받으면 여기에 담긴다.(아이디를 제공하는 경우는 거의 없다.)
+
get_provider_display. {{ account.get_provider_display }}
+
id. {{ account.id }}
+
</syntaxhighlight>
<references />
<references />
196번째 줄:
239번째 줄:
login(request, user, backend='django.contrib.auth.backends.ModelBackend')
login(request, user, backend='django.contrib.auth.backends.ModelBackend')
−
[[분류:장고 기능구현(초급)]]
[[분류:장고 기능구현(초급)]]