์์ ๋ถํฐ ์ฅ๊ณ ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ฉ์ ๊ฑฐ์ ํ์ง ์๊ณ ์๋ ์ธ์ฆ์ ๊ตฌํํ ์ ์์ง ์์๊นํ๋ ํ์์ด ์์๋๋ฐ, ๋ง์นจ ์ฅ๊ณ ๋ฅผ ์ด์ฉํ๋ ๋๊ตฌ์ ์ธ์ฆ์ ๋ถ์ผ ์ผ์ด ์๊ฒจ์ ๊ทธ ํ์์ ์คํํ ๊ธฐํ๋ฅผ ์ป์๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด ์ฝ๋ฉ์ ์ ๋ง ํ ์ค๋ ํ์ง ์์๋ค. ๋์ ํ์ ์ฅ๊ณ ์ ์ต์ํ์ง ์์์ ์ฌ๋ฌ ํํ ๋ฆฌ์ผ๊ณผ ์ง๋ฌธ/๋ต๋ณ์ ์ฎ๊ฒจ๋ค๋๋ฉด์ ์ฝ๋๋ฅผ ์ฐธ์กฐํ๊ธฐ์ ๊ทธ ๊ณผ์ ์ ๋ฏธ๋์ ๋๋ฅผ ์ํด ํ๋์ ํํ ๋ฆฌ์ผ๋ก ๋จ๊ฒจ๋ณธ๋ค. ๊ฐ ๋จ๊ณ๋ณ๋ก ๋งํฌ๋ ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผ ํ๋ค๋ ์ ์ ํ์, ๋ด๊ฐ ๋น ๋จ๋ ธ๋ ๋ถ๋ถ์ ์ฒจ์ธํ๋ ์์ผ๋ก ํํ ๋ฆฌ์ผ์ ๊ตฌ์ฑํด๋ณด์๋ค.
๋ญ๊ฐ RESTful ํ๊ฒ ๋ณด์ฌ์ค ๊ฒ์ด ์์ด์ผํ๋๊น ์ฅ๊ณ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด ์๊ธฐ๋ User ๋ฅผ ์ํ Serializer ๋ฅผ ๋ง๋ ๋ค. ์ญ ๋ฐ๋ผ๊ฐ๋ค๊ฐ URL ๋ถ๋ถ์์ ์ฝ๊ฐ ์ฐจ์ด์ ์ด ์๊ธด๋ค. DRF ํํ ๋ฆฌ์ผ์์๋ admin ์ ์ฌ์ฉํ์ง ์๋๋ฐ, ์ฌ๊ธฐ์๋ ๋์ค์ django-allauth ์ ํ์ด์ค๋ถ ์ฑ์ ์ค์ ํด์ผํ๊ธฐ ๋๋ฌธ์ admin ์ ๋จ๊ฒจ์ค์ผ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์๋ ์ฝ๋์ ๋ ์ค ์ถ๊ฐํด์
from django.contrib import admin #์ด๋๋ฏผ
from django.conf.urls import url, include
from rest_framework import routers
from tutorial.quickstart import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^admin/', admin.site.urls), #์ด๋๋ฏผ
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
url.py
๋ฅผ ์ด๋ ๊ฒ ๋ง๋ค์ด์ค๋ค. ๊ณ์ ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผ๊ฐ๋ณธ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ํํ ๋ฆฌ์ผ ์ ๋ฐ๋ผ๊ฐ๋ค. ์๊ฐ์ ๋ค์ ๋ง์ด ์ด ๋ถ๋ถ์
Social Authentication ๋ถ๋ถ์ Add Social Application in django admin panel ๋ถ๋ถ์ด์๋๋ฐ, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์กดํ๊ณ ์๋ django-allauth ๋ฅผ ํ ๋ฒ๋ ์ฌ์ฉํ ์ ์ด ์์ด์ ๋ง์ด ํค๋งธ๋ค. ๋ฌด์์ํ์ง๋ง๊ณ django-allauth ์ ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผ ๊ฐ๋ณธ๋ค. ์ฐ๋ฆฌ๋ ํ ํฐ ๊ธฐ๋ฐ์ ์ธ์ฆ์ ์ฌ์ฉํ ํ
๋ settings.py
์
REST_SESSION_LOGIN = False
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
)
}
์ด๋ฐ ์์ผ๋ก ์ค์ ํด์ค๋ค.
๋ค์ ๋ ํํ ๋ฆฌ์ผ ์ ๋ฐ๋ผ๊ฐ๋ค. ํ์ด์ค๋ถ ์ฝ์์์ ์ฑ ๋ฑ๋กํ๋ ๋ถ๋ถ์ ํจ์ค. SITE_ID
๋ผ๋ ๊ฐ๋
์ด ์์ํ ์ ์๋๋ฐ ์ด์ฐจํผ ์ง๊ธ์ ์ฌ์ดํธ๋ฅผ ์ฌ๋ฌ๊ฐ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ ์ด๋๋ฏผ์์ sites ๋ก ๋ค์ด๊ฐ ์ฒ์์ ๋ค์ด์๋ โexample.comโ์ ์ฌ์ฉํ hostname ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
django-allauth ๋ ๋ค์ํ ์๋น์ค์ ๋ก๊ทธ์ธ์ ์ง์ํ๋๋ฐ, ์ฐ๋ฆฌ๋ ๊ทธ ์ค ํ์ด์ค๋ถ์ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ๋งํฌ๋ฅผ ๋ฐ๋ผ settings.py
์ ์ค์ ์ ๋ฃ์ด์ค๋ค. ์์ ์๋ ํญ๋ชฉ์ด ๋ง์ด ๋์์๋๋ฐ ํ์ฌ ์ฉ๋์์๋
SOCIALACCOUNT_PROVIDERS = {
'facebook': {
'SCOPE': ['email'],
'METHOD': 'oauth2'
}
}
์ด์ ๋๋ง ์จ์ค๋ ๋ฌด๋ฆฌ๊ฐ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ก Facebook ๋ก๊ทธ์ธ ๋ฒํผ์ ๋ง๋ ๋ค์์ (React ์์๋ React Facebook Login์ด ๊ฐํธํ๋ค) ๋ก๊ทธ์ธ ์ฑ๊ณต์ ๋ฐ์ ํ ํฐ์ผ๋ก rest-auth/facebook/
์ POST ์์ฒญ์ ๋ ๋ ค์ฃผ๋ฉด ๋๋ค. ํค๋์ Authroization ๋์ ํ ํฐ์ ๋ฃ์ ๋์๋ โToken XXXโ (๊ณต๋ฐฑ ํฌํจ) ์์ผ๋ก ๋ฃ์ด์ค์ผ ํ๋ค.
์ด๊ฑด ๋ง ๊ทธ๋๋ก ๊ฒํฅ๊ธฐ๊ณ , ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋๋ ค๋ฉด ์ฅ๊ณ ์ ์ ์ ๋ชจ๋ธ๊ณผ ์ธ์ฆ์ ๋ํด์ ๊ณต๋ถ๋ฅผ ํจ์ฌ ๋ ๋ง์ด ํด์ผํ ๊ฒ ๊ฐ๋ค. ๊ทธ๋๋ ์ผ๋จ ํ ๋ฒ ์ต์ํด์ง๋ฉด ๊ฐ๋ฐ ์๋๊ฐ ๋น ๋ฅด๋ ์ฅ๊ณ ๋ฅผ ์ฃผ๋ ฅ์ผ๋ก ์ฌ์ฉํ์๋ ๋ถ๋ค์ ์์ฐ์ฑ์ด ์ ๋ง ์ด๋ง์ด๋งํ์๊ฒ ๊ตฌ๋ ์ถ๋ค.