'll Hacker
[WIL] 4주차, Django 사용자 인증 시스템 본문

회원가입 및 로그인
Django 의 내장 시스템은 사용자 계정, 그룹, 권한, 쿠키 기반의 사용자 세션을 처리
[모델 백엔드]
사용자 모델(User 객체)
: Django는 username, password, email, first_name, last_name 등의 필드를 포함한 내장 사용자 모델을 제공
- 일반적으로 사이트와 상호작용하는 사람들을 나타내며 액세스 제한, 사용자 프로필 등록, 콘텐츠와 작성자 연결 등과 같은 작업을 활성화하는데 사용됨.
폼 : Django는 로그인, 로그아웃, 비밀번호 재설정, 비밀번호 변경 작업에 사용할 수 있는 준비된 폼을 제공
뷰 : Django에는 사용자 인증 작업을 처리하는 뷰가 포함되어 있음.
미들웨어 : Django는 주어진 HTTP 요청과 관련된 사용자를 자동으로 결정하는데 사용하는 미들웨어를 제공
백엔드 : 인증 백엔드는 Django가 다양한 방식으로 사용자의 자격 증명을 확인할 수 있도록 함.
[인증 메소드]

장고의 로그인, 로그아웃을 도와주는 앱
프로젝트 생성 시 INSTAlLED_APPS에 자동으로 추가
UserModel, Permission, Authorization 등을 담당

authenticate( ) : 요청과 일부 자격 증명을 인수로 받아, 자격 증명이 사용자에게 유효한 경우 User 객체를 반환
login( ) : 요청과 User 객체를 인수를 받아 사용자를 로그인
logout( ) : 요청을 인수로 받아 사용자를 로그아웃
[UserCreationForm]
Django에서 기본적으로 제공하는 로그인 폼
Django의 UserCreationForm 클래스는 django.contrib.auth form 패키지에 있으며,
이를 상속해서 유저 생성 form을 쉽게 구현가능

비밀번호 필드는 is_valid()라는 내부 검증 메소드를 가지고 있음.
[회원가입]


request의 POST 객체에서 해당 Key의 값을 받아옴

create_user()을 통해 비밀번호 암호화 및 사용자 생성
create( ) 는 비밀번호 해싱없이 인스턴스 그대로 생성, set_password() 통한 해싱 작업 후 save( ) 필요
create_user( ) 는 비밀번호 해싱 및 사용자 인스턴스 생성
[로그인]


사용자 인증

User가 존재할 경우 request의 user을 로그인 처리
login( )을 통해 사용자 session 생성
세션 미들웨어와 연동되어 사용자의 로그인 상태를 관리한다.
만약 이전에 다른 사용자가 로그인된 상태라면, 새로운 세션을 생성하여 현재 로그인한 사용자의 세션으로 교체
[로그아웃]

is_authenticated
: 사용자의 로그인 여부를 확인하는 속성, 로그인한 사용자이면 True, 로그인을 하지 않은 사용자라면 False 반환
logout( )은 사용자 로그인 세션 삭제하고, 로그인 상태 유지를 위한 쿠키를 삭제한다.
OAuth 2.0
OAuth이란?
인터넷 사용자들이 비밀번호를 제공하지 않고 다른 엡사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는 접근 위임을 위한 개방형 표준이다.
Resource Owner : 웹 서비스를 이용하려는 유저, 자원을 소유하는 자, 사용자
Client : 자사 또는 개인이 만든 애플리케이션 서버
Authorization Server : 권한을 부여해주는 서버
Resource Server : 사용자의 개인정보를 가지고 있는 애플리케이션(구글, 페이스북,카카오 등) 회사 서버
Access Token : 자원에 대한 접근 권한을 Resource Owner가 인가하였음을 나타내는 자격증명
Refresh Token : Client는 Authorization Server로부터 access token과 refresh token을 함께 부여받음
[OAuth 과정]

네이버 로그인으로 구현!!
1. 일단 셋팅
pip install django-allauth

근데,, 이거 말고도 allauth사용하려면 많은 것을 설치해야됨...;
2. settings.py에서 INSTALLED_APPS 변경
INSTALLED_APPS = [
...
# allauth
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.naver', #네이버
]
3. AUTHENTICATION_BACKENDS 추가
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
]
4. 구글 추가
SOCIALACCOUNT_PROVIDERS = {
'google': {
'SCOPE': [
'profile',
'email',
],
'AUTH_PARAMS': {
'access_type': 'online',
}
}
}
SITE_ID = 1
5. URL 등록
urlpatterns = [
...
path('accounts/login', include('allauth.urls')),
...
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
6. 마이그레이션
python manage.py makemigrations
python manage.py migrate
7. API 키 값 가져오기
https://developers.naver.com/apps/#/wizard/register
네이버 개발자 센터에서 신청 후 api 설정에서 애플리케이션 이름 카테고리는 네이버 로그인 선택

다음은 callback url을 입력(allauth를 사용했으니까 allauth 콜백을 입력)
Client secret키 복사


장고 admin에 들어가면 메뉴에 소셜 애플리케이션을 클릭 후 소셜 어플리케이션을 추가


비밀키에는 복사한 비밀키를 입력하고, 클라이언트 아이디도 복사해서 넣어줌
이용가능한 sites에서 example.com을 오른쪽으로 옮기기


그리고 http://127.0.0.1:8000/accounts/login/으로 이동하면 아래와 비슷한 로그인 화면이 나옴

네이버로그인 구현 완료!!
'Dev > GDSC' 카테고리의 다른 글
| [WIL] 6주차, Django Authentication (1) | 2024.11.23 |
|---|---|
| [WIL] 5주차, Django REST Framework(DRF) (6) | 2024.11.16 |
| [WIL] 3주차, Django의 모델 및 데이터베이스 (1) | 2024.10.04 |
| [WIL] 2주차, Django의 MVT 아키텍처 이해 (1) | 2024.09.27 |
| [WIL] 1주차, Django 기본 이해 및 환경설정 (2) | 2024.09.20 |