728x90
[관리자 페이지] 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 된것을 볼 수 있습니다.
728x90
'project > 관리자 페이지' 카테고리의 다른 글
[관리자 페이지] Admin Page - 회원가입 구현하기 #6 JWT 토큰 발행 (0) | 2024.04.04 |
---|---|
[관리자 페이지] Admin Page - 회원가입 구현하기 #5 비밀번호 체크 (0) | 2024.04.01 |
[관리자 페이지] Admin Page - 회원가입 구현하기 #3 Insert User Data (0) | 2024.03.30 |
[관리자 페이지] Admin Page - 회원가입 구현하기 #2 API Router (0) | 2024.03.29 |
[관리자 페이지] Admin Page - 회원가입 구현하기 #1 User Table 생성 (0) | 2024.03.29 |