[Django]회원가입 및 로그인

Hyeo_Ni__·2024년 1월 23일
0

Django

목록 보기
9/12
post-thumbnail

📚 회원가입

장고에서는 DB 연동시 자동으로 회원가입에 사용할 수 있는 Auth_User테이블이 생성된다.

models.py에 AuthUser를 가져온 후 사용하기 위해 간단히 설정을 해줘야한다.

✍ 코드

# models.py
class AuthUser(models.Model):
    password = models.CharField(max_length=128)
    last_login = models.DateTimeField(blank=True, null=True)
    is_superuser = models.IntegerField(default=False) # default 설정
    username = models.CharField(unique=True, max_length=150)
    first_name = models.CharField(max_length=150)
    last_name = models.CharField(max_length=150)
    email = models.CharField(max_length=254)
    is_staff = models.IntegerField(default=0) # default 설정
    is_active = models.IntegerField(default=0) # default 설정
    date_joined = models.DateTimeField(auto_now_add = True) # 날짜 자동 입력

    class Meta:
        managed = False
        db_table = 'auth_user'

바로 기본값(default) 설정이다.
기본값을 설정하지 않을 경우 Null값이 허용되지 않은 열들이 있어 에러가 발생한다.
is_superuser, is_staff, is_active 값을 default로 0 혹은 False로 설정한다.
이후 date_joined는 auto_now_add를 True로 주어 데이터 입력시 값이 자동으로 입력되게 해준다.

✍ 코드

# serializers.py

class AuthUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = AuthUser
        fields = ('id', 'username', 'password')
        
# views.py
@api_view(['POST'])
def signup(request):
    if request.method == 'POST':
        serializer = AuthUserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()

            return Response({'message': '회원 가입이 완료되었습니다.'}, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

간단히 POST를 받아와 회원가입을 할 수 있다.
이후 JSON형식으로 username과 password를 설정한다.

✍ 코드

{
	"username":"username",
    "password":"password"
}

MySQL에서 DB를 확인해보면 아래와 같이 입력되어 있는 것을 볼 수 있다.

하지만 보안을 위해 password는 암호화하여 DB에 저장할 수 있도록 해주는 것이 좋다.


📚 PASSWORD 암호화

make_password
: Django에서 제공하는 함수로 문자열을 암호화 시킨다.

✍ 코드

# models.py

from django.contrib.auth.hashers import make_password

@api_view(['POST'])
def signup(request):
    if request.method == 'POST':
        serializer = AuthUserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
             # Serializer에서 입력받은 원시 비밀번호를 가져온다.
            raw_password = serializer.validated_data.get('password')
            
            # make_password 함수를 사용하여 비밀번호를 해시화하고 저장한다.
            hashed_password = make_password(raw_password)
            serializer.save(password=hashed_password)

            return Response({'message': '회원 가입이 완료되었습니다.'}, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

위와 같이 코드를 수정 후 저장하면 비밀번호가 암호화 되어 들어간 것을 확인할 수 있다.

profile
개발자로 성장 중 입니다.

0개의 댓글