본문 바로가기

전체 글

(84)
Python - bcrypt, pyjwt BE 개발자가 인증 인가를 구현하기 위한 필수 요건 1. 비밀번호 암호화 2. 새로 입력한 비밀번호가 기록된 것과 일치하는지 확인(인증) 3. 인가의 수단인 JWT 생성 4. JWT 유효성 확인 1. 비밀번호 암호화 bcrypt: 단방향 hash 함수로 암호화할 때 사용할 수 있는 파이썬 라이브러리. 입력, 출력값이 전부 bytes type이다. 결과값(digest)의 형태는 $$$. gensalt method로 랜덤한 salt를 만들 수 있다. gensalt()에 주는 숫자 param은 log_rounds인데, key stretching + salting을 반복하는 강도를 뜻한다. 기본 12로 되어 있고 대개 이대로 사용하는 걸 추천한다. django의 charfield에 bytes type을 넣으면 ..
백엔드 서버 되어보기 Django로 프로젝트를 생성, app을 만들고 models.py, views.py, urls.py를 작성하여 엔드포인트를 생성했다. 이제 프론트엔드가 클라이언트가 되어 여기로 요청을 보내고 응답을 받아갈 수 있다. 터미널에서 혼자 서버 켜고 다른 터미널에서 httpie를 사용하여 테스트하던 것과 다른, 진짜 누군가와 주고 받는 통신이다. views.py에있는 클래스 안에 POST, GET method가 있고 이 method가 갖는 argument로 request가 있다. 프론트가 요청을 보내면 이 request로써 들어오고, 필요한 정보를 추출해 DB에 반영하는 등의 로직을 거친다. 응답을 보낼 땐 method와 설정해둔 응답의 유형에 따라 status code만 보내기도 하고 header나 paylo..
Python - pyjwt v2.0.0 업데이트에 따른 이슈 인가 : 사용자가 요청하는 request를 실행할 수 있는 권한이 있는 유저인가를 확인하는 절차 사용자는 인가의 수단으로 headers에 메타데이터를 넣어서 요청을 보냅니다. pyjwt는 이 메타데이터 JWT(JSON Web Token)를 구현할 수 있게 해주는 라이브러리입니다. 2018년 말 release된 v1.7.1에서는 jwt.encode를 실행했을 때 actual result가 bytes type으로 나오는 이슈가 있었습니다. 2020년 말 release 된 v2.0.0에서는 여러가지가 바뀌었습니다. - 3.5 이하의 python은 support 하지 않음 - jwt.encode의 return type은 string - jwt.decode에 algorithms를 필수 param으로 사용 - jw..
Django 회원가입, 로그인 엔드포인트 인스타그램의 기능을 한 가지씩 만들어보는 westagram 프로젝트를 진행중이다. 첫 단계는 회원가입과 로그인이다. 원래 회원가입 엔드포인트와 로그인 엔드포인트 블로그 글을 따로 쓰려 했는데, 에러 처리 면에서 전자가 후자를 포괄한다고 볼 수 있어서 글을 수정했다.(만들면서 쓸 걸 나중에 쓰니까 번거롭다...) 회원가입 조건 필수 사항: email, password email에는 '@'와 '.'가 반드시 포함되어야 함. password는 8자 이상. user/models.py from django.db import models class User(models.Model): email = models.CharField(max_length=30) password = models.CharField(max_le..
django.db.utils.OperationalError: (1054, "Unknown column 'menu_id_id' in 'categories'") 처음 models.py를 만들 때 categories 테이블에 들어갈 ForeignKey의 이름을 잘못 주었다. ForeignKey는 장고가 알아서 _id를 붙여 column name을 주는데, 이름 자체에도 _id를 붙여 migrate한 바람에 column name이 menu_id_id 이렇게 만들어졌다. 그래서 일단 수정하고 그 뒤 작업을 계속했다. 이 때 잊은게, makemigration은 하고 migrate를 안 했다... runserver할 때 migrate를 하라는 경고가 떴지만 이것저것 바꾸고 있으니 조금만 있다가 하자, 하던게 쌓이고 쌓여... 오늘은 migrate를 해야겠다 생각하고 $ python manage.py migrate를 했는데 에러를 보고 예상은 했지만 어디서 문제가 났는지 ..