<li>
{% if not user.is_authenticated %}
<a class="nav-link" href="{% url 'common:signup' %}">회원가입</a>
{% endif %}
</li>
app_name = "common"
urlpatterns = [
path("signup/", views.signup, name="signup"),
]
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class UserForm(UserCreationForm):
email = forms.EmailField(label="이메일")
class Meta:
model = User # User모델을 참조
fields = (
"username",
"password1",
"password2",
"first_name",
"last_name",
"email",
)
from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render, redirect
from common.forms import UserForm
def signup(request):
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password) # 사용자 인증
login(request, user) # 로그인
return redirect('index')
else:
form = UserForm()
return render(request, 'common/signup.html', {'form': form})
if form.is_valid() : UserCreationForm의 속성 3개가 모두 입력되었는지, 비밀번호1과 비밀번호2가 같은지, 비밀번호의 값이 비밀번호 생성 규칙에 맞는지 등을 검사하는 로직을 내부적으로 가지고 있다!
form.cleaned_data.get : 회원가입시 작성한 form 입력값을 개별적으로 얻고싶은 경우 사용.
회원가입 완료 후 가입 된 username으로 authenticate() 후 login() 실행하는 과정에서 가입 된 정보로 입력한 authenticate()가 none을 반환 함.
문제코드 확인
user = authenticate(
user=username,
password=raw_password1,
)
django 공식문서 authenticate() 관한 내용
authenticate 상태가 아니면 login으로 이동하게 함
이때, authenticate 상태가 아닌 상태에서 signup으로 이동가능해야 함
정리 완료