project/관리자 페이지
[관리자 페이지] Admin Page - 회원가입 구현하기 #4 비밀번호 암호화
octo54
2024. 3. 31. 00:13
반응형
[관리자 페이지] Admin Page - 회원가입 구현하기 #4 비밀번호 암호화
사용자의 정보는 id 와 password입니다. 이 password를 DB에 입력하기 전에 암호화 해서 넣어 줍니다.
python에서 암호화 모듈은 bcrypt를 사용합니다.
pip install bcrypt
암호화 하기 이전에 UserMoodel을 2개의 class로 나누어 줍니다.
기존의 UserModel에 id만을 남기고 password는 UserWithPasswordModel class에 옮겨주고 이 class는 UserModel을 상속받습니다.
# api/models/user.py
from typing import Optional
import bcrypt
from pydantic import BaseModel, Field
class UserModel(BaseModel):
id: Optional[str] = Field(None, description="user's id")
class Config:
from_attritues = True
class UserWithPasswordModel(UserModel):
password: Optional[str] = Field(None, description="user's password")
class Config:
from_attritues = True
암호화를 실행하는 method를 UserWithPasswordModel에 정의합니다.
class UserWithPasswordModel(UserModel):
password: Optional[str] = Field(None, description="user's password")
class Config:
from_attritues = True
def hash_password(self):
self.password = bcrypt.hashpw(self.password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8")
hash password 메소드를 실행하면 UserWithPasswordModel에서 받은 password는 암호화 되어 집니다.
UserService insert_user 에 hash_password 메소드를 실행하는 코드를 추가합니다.
def insert_user(self, user: UserWithPasswordModel) -> bool:
try:
user.hash_password()
self.db.add(User(**user.dict()))
self.db.commit()
return True
except Exception as e:
self.db.rollback()
return False
암호화된 비밀번호가 insert 된것을 볼 수 있습니다.