코드로 우주평화
SQLAlchemy, ‘PasswordType’으로 손쉽게 암호화하자 본문
PasswordType 이란?
sqlalchemy를 이용해 model 클래스에서 PasswordType을 적용할 수 있습니다.
PasswordType을 적용한 model은 사용자가 입력한 패스워드를 자동으로 암호하하여 데이터베이스에 저장합니다.
모델 컬럼 타입을 지정한 것만으로 개발자가 따로 암호화 로직을 구현하지 않아도 되는 것입니다.
패스워드 암호화 저장
PasswordType을 사용하기 위해서는 먼저 SQLAlchemy-Utils를 설치해야합니다.
pip install sqlalchemy-utils
설치가 완료되었다면 model파일에 import 해줍니다.
# models.py
from sqlalchemy_utils import PasswordType
import 후 아래에 User model을 작성해보았습니다.
이메일과 패스워드를 받는 간단한 회원가입 모델입니다.
# models.py
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
email = Column(String)
password = Column(
PasswordType(schemes=["pbkdf2_sha512", "md5_crypt"],
deprecated=["md5_crypt"]),
)
pbkdf2_sha512 는 암호를 해시하는데 사용됩니다.
md5_crypt 는 이후 패스워드를 비교할 때 사용됩니다.
이렇게 모델 컬럼에 타입을 지정한 것만으로 회원가입 암호화 로직이 끝났습니다.
패스워드 확인
패스워드 확인방법도 굉장히 쉽습니다.
먼저 유저 객체를 만들어 패스워드를 넣어보겠습니다.
user = User()
user.password = 'b'
# >>> '$5$rounds=80000$H.............'
패스워드를 넣으면 자동으로 암호화되어 저장됩니다.
유저 객체의 패스워드를 아까 입력한 ‘b’와 일치여부를 물으면 True를 반환합니다.
user.password == 'b'
# >>> True
??
벌써 확인이 끝났습니다!
개발자는 암호화와 마찬가지로 복호화 로직 또한 작성하지 않아도 됩니다.
아주 간편하게 회원가입과 패스워드 일치여부 기능이 구현되었습니다.
데이터베이스에서 암호화, 복호화가 필요하다면 SQLAlchemy-Utils의 PasswordType을 사용해보세요!
*자세한 내용은 공식문서를 참고해주세요.
'나는 이렇게 학습한다 > Library' 카테고리의 다른 글
SQLAlchemy에서의 비동기 쿼리 (feat. 2.0 Style) (0) | 2022.04.24 |
---|---|
SQLAlchemy를 이용해 csv파일 DB업로드 하는 방법(feat. psql) (2) | 2022.04.21 |
Poetry로 프로젝트 패키지를 관리하자 (0) | 2022.04.11 |
pre-commit 에서 ‘flake8’ 과 ‘black’ 커스텀 문제 (0) | 2022.04.07 |
pre-commit 을 이용해 commit 전 코드 체크를 자동화하자. (0) | 2022.04.06 |