2024. 2. 28. 15:35
1. 인증 담당 앱 생성
python manage.py startapp xauth
2. INSTALLED_APPS 에 xauth 등록
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'xauth'
]
3. xauth.models.py 에서 AbstractUser를 상속받아 XUser 생성
class XUser(AbstractUser):
nation = models.CharField(max_length=50)
USERNAME_FIELD = "email"
4. settings.py 에 AUTH_USER_MODEL 등록
AUTH_USER_MODEL = 'xauth.XUser'
5. xauth.admin.py 에서 Admin 에 XUser 등록
admin.site.register(XUser)
6. DB 테이블 생성
python manage.py makemigrations
python manage.py migrate
7. urls.py 에 auth 경로 작성
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('auth/', include('xauth.urls'))
]
8. xauth.urls.py 작성
urlpatterns = [
path('login/', views.loginx, name="loginx"),
path('logout/', views.logoutx, name="logoutx"),
path('signup/', views.signupx, name="signupx")
]
9. 회원가입 코드 생성
def signupx(request):
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
email = request.POST['email']
nation = request.POST['nation']
user = User.objects.create_user(username, email, password)
user.nation= nation
user.save()
return redirect('users:login')
10. login 코드 생성
def loginx(request):
if request.method == "POST":
post = request.POST
email = post['email']
password = post['password']
user = authenticate(username=email, password=password)
if user is not None: # login success
res = login(request, user)
print(f'res : {res}')
print('auth success~!')
else:
print('auth failed~!')
11. logout 코드 생성
def logoutx(request):
logout(request)
return redirect('users:login')
12. 버그 수정
XUser 에서 email로 로그인을 하기 위해
USERNAME_FIELD 를 설정하면 버그 발생한다
AbstractUser 에서 변경해야 함
1. email 항목 unique 추가
email = models.EmailField(_("email address"), unique=True, blank=True)