파이썬과 JWT를 이용한 회원 가입 및 인증 이메일 발송 시스템 구현

이 포스트에서는 파이썬과 JWT(JSON Web Token)를 이용하여 회원 가입 및 인증 이메일 발송 시스템을 구현하는 방법을 알아보겠습니다. JWT는 웹 응용 프로그램에서 사용자 인증 및 정보 교환을 안전하게 처리하는 데 사용되는 인증 토큰입니다. 이를 활용하여 회원 가입 시 사용자 이메일 주소를 확인하고, 인증 이메일을 발송하는 기능을 구현할 것입니다.

필요한 패키지 설치 및 환경 설정

먼저, 필요한 파이썬 패키지를 설치해야 합니다. 이를 위해서는 pip를 사용하여 다음 명령어를 실행합니다.

pip install flask flask-mail flask-jwt-extended

또한, 이메일을 발송하기 위해 Gmail SMTP 서버의 인증 정보가 필요합니다. 이메일 발송을 위한 계정을 설정하고, 해당 계정의 이메일 주소와 비밀번호를 아래와 같은 형태로 환경 변수에 저장해야 합니다.

export EMAIL_USERNAME=your-email@gmail.com
export EMAIL_PASSWORD=your-password

회원 가입 및 이메일 발송 기능 구현

  1. Flask와 필요한 라이브러리를 임포트합니다.

    from flask import Flask, request
    from flask_mail import Mail, Message
    from flask_jwt_extended import JWTManager, create_access_token, jwt_required
    
  2. Flask 애플리케이션과 JWTManager를 초기화합니다.

    app = Flask(__name__)
    app.config['MAIL_SERVER'] = 'smtp.gmail.com'
    app.config['MAIL_PORT'] = 587
    app.config['MAIL_USE_TLS'] = True
    app.config['MAIL_USERNAME'] = os.environ.get('EMAIL_USERNAME')
    app.config['MAIL_PASSWORD'] = os.environ.get('EMAIL_PASSWORD')
    mail = Mail(app)
    jwt = JWTManager(app)
    
  3. 회원 가입을 위한 엔드포인트를 구현합니다. 사용자 이메일 주소를 받고, JWT를 생성하여 이메일 본문에 포함된 링크에 첨부합니다.

    @app.route('/signup', methods=['POST'])
    def signup():
        email = request.form['email']
        token = create_access_token(identity=email)
        msg = Message('회원 가입 인증', recipients=[email])
        msg.body = f'가입을 완료하기 위해 아래 링크를 클릭하세요:\n\nhttp://your-website.com/verify?token={token}'
        mail.send(msg)
        return '이메일이 발송되었습니다.'
    
  4. 인증 이메일 확인을 위한 엔드포인트를 구현합니다. JWT를 검증하여 사용자의 이메일 주소를 확인하고, 이메일 인증을 완료합니다.

    @app.route('/verify', methods=['GET'])
    @jwt_required
    def verify():
        email = get_jwt_identity()
        # 이메일 인증 로직 구현
        return '이메일 인증이 완료되었습니다.'
    
  5. 서버를 실행하여 회원 가입 및 이메일 발송 시스템을 동작시킵니다.

    if __name__ == '__main__':
        app.run()
    

마무리

이와 같이 파이썬과 JWT를 이용하여 회원 가입 및 인증 이메일 발송 시스템을 구현할 수 있습니다. 이를 통해 사용자의 이메일 주소를 확인하고, 안전한 인증 절차를 거쳐 서비스에 가입하는 기능을 제공할 수 있습니다. 이 과정을 통해 사용자 데이터의 보안과 신뢰성을 높일 수 있습니다.

#Python #JWT #인증 #이메일발송