1. 해싱 알고리즘 적용하기
# db 폴더 - hasing.py
from passlib.context import CryptContext
pwd_cxt = CryptContext(schemes=['bcrypt'], deprecated='auto')
class Hash():
def bcrypt(password: str):
return pwd_cxt.hash(password)
def verify(hashed_password, plain_password):
return pwd_cxt.verify(plain_password, hashed_password)
db 폴더에 hashing 파일을 하나 생성한다.
from passlib.context import CryptContext
암호관련 패키지를 가져온다.
pwd_cxt = CryptContext(schemes=['bcrypt'], deprecated='auto')
해싱 스키마를 bcrypt 로 설정하고 암호화 해시 알고리즘에서 자동으로 추천되는 버전을 사용하도록 설정한다.
Hash 클래스에서
class Hash():
def bcrypt(password: str):
return pwd_cxt.hash(password)
문자열로 들어온 평서문 암호를 해시화해서 반환하고 (반환한 해시화된 암호는 데이터베이스에 저장된다)
def verify(hashed_password, plain_password):
return pwd_cxt.verify(plain_password, hashed_password)
암호 확인 작업이다. 사용자가 입력한 평서문 암호와 해시화 된 암호를 비교해서 일치하면 True, 불일치하면 False를 반환한다.
# db-db_user_crud.py
from routers.schemas import UserBase
from sqlalchemy.orm.session import Session
from db.models import DbUser
from db.hashing import Hash
def create_user(db:Session, request: UserBase):
new_user = DbUser(
username = request.username,
password = Hash.bcrypt(request.password)
)
db.add(new_user)
db.commit()
db.refresh(new_user)
return new_user
유저 생성 기능에서 입력 받은 암호를 hash.bcrypt의 매개변수로 보내서 해시화된 암호로 받아와 데이터베이스에 저장한다.
이 과정에서 관리자도 직접 암호를 볼수 없다.
스웨거 UI를 통해서 hasingtest/test 로 유저를 생성했다.
tableplus에서 바로 확인 할수 있듯이 암호가 test가 아니라 해싱된 암호로 데이터베이스에 저장되었다
(test/1234와 차이를 바로 확인가능하다.)
'파이썬 > 육각남 찾기 프로젝트(FastAPI+React)' 카테고리의 다른 글
육각남 찾기 프로젝트 11. React 헬로 월드 (0) | 2024.03.16 |
---|---|
육각남 찾기 프로젝트 10. 첫번째 질문에 답하기 (0) | 2024.03.15 |
육각남 찾기 프로젝트 9. 통계 자료 조작과 데이터 베이스에 넣기 (0) | 2024.03.14 |
육각남 찾기 프로젝트 8. 통계자료 찾기 (0) | 2024.03.13 |
육각남 찾기 프로젝트 6. 스키마 작성과 유저생성 기능 구현 (0) | 2024.03.11 |
육각남 찾기 프로젝트 5. 데이터베이스 모델링 (0) | 2024.03.11 |
육각남 찾기 프로젝트 4. CORs 문제 해결 (0) | 2024.03.11 |
육각남 찾기 프로젝트 3. 백엔드 코딩 시작, 헬로월드 (0) | 2024.03.11 |