backend/django

django 소셜 로그인 기능 구현 (facebook)

seul chan 2017. 4. 14. 16:14

Guest/ login 기능

sns 계정을 연동해서 사용하기

댓글달기 기능만 sns 연동하면 할 수 있게?

추가적으로 나중에 북마크 기능을 달면 scrap 되도록 해주면 좋을듯 (login시에만…)s

social-auth 사용하기

  1. 설치

pip install social-auth-app-django 로 간단하게 설치할 수 있음.

  • INSTALLED_APPS에 social_django 추가

  • python mange.py migrate로 마이그레이트 하기

  1. 세팅

  • settings.pyMIDDLEWARE_CLASSES에 추가하기

'social_django.middleware.SocialAuthExceptionMiddleware',

  • TEMPLATE의 context_processors 추가하기

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            PROJECT_DIR.child('templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',

                'social_django.context_processors.backends',  # <--
                'social_django.context_processors.login_redirect', # <--
            ]
        },
    },
]
  • AUTHENTICATION_BACKENDS 추가하기

사용할 것들을 추가해주 면 되는 것 같다. 나는 일단 페이스북만 구현하기. 위해 페북을 넣었다.

AUTHENTICATION_BACKENDS = (
    'social_core.backends.github.GithubOAuth2',
    'social_core.backends.twitter.TwitterOAuth',
    'social_core.backends.facebook.FacebookOAuth2',

    'django.contrib.auth.backends.ModelBackend',
)
  • Facebook 개발자 페이지에서 키, 시크릿키(?)를 얻은 다음에 추가해주기

SOCIAL_AUTH_FACEBOOK_KEY = ''
SOCIAL_AUTH_FACEBOOK_SECRET = ''

  1. URL에 추가

urls.py에다가 추가해준다. 나는 oauth로 추가였다.

url(r'^oauth/', include('social_django_urls', namespace='social'))

  1. Template

    {% url "social:begin" "facebook" %}?next={{ request.path }} 로 url 만들 수 이씀

이제 버튼을 누르면 자동으로 facebook 페이지로 넘어가진다… 휴 어렵네

  1. 댓글달기에 적용시키기

=> 댓글 창이 아예 안 나와있고 로그인시 댓글 창이 뜨게 하는 방법

=> 댓글 창이 블락되어있고 로그인시 쓸 수 있게 해놓기?

<input disabled>로 input 창을 비활성화 시킬 수 있음

추가적인 이슈

페이스북 로그인시 redirect 문제: ?next={{ request.path }}로 해결댓글 수정/삭제시 특정 유저가 작성했는지에 대한 이슈 => 완료하긴 했으나 detail 페이지가 수정도면 update_comment 페이지도 수정해야함...로그아웃시 redirect 문제 => 이전 url로 다시 돌아오게