본문 바로가기

RestfulAPI

Flask에서 JWT 사용하여 회원가입 API 만들기 및 토큰처리

 

Flask에서 JWT 사용하기: 회원가입 API 만들기

JWT(JSON Web Token)는 웹 애플리케이션에서 사용자 인증을 구현하는 데 널리 사용되는 방법이다. Flask와 JWT를 사용하여 간단한 회원가입 API를 만드는 방법을 알아보겠다.

JWT란?

JWT는 JSON 객체를 사용하여 두 개체 간에 정보를 안전하게 전송하기 위한 컴팩트하고 자가 포함된 방식이다. 주로 사용자 인증과 정보 교환에 사용된다. JWT는 세 부분으로 구성된다:

  • 헤더(Header): 토큰의 유형과 해싱 알고리즘을 포함한다.
  • 페이로드(Payload): 토큰의 데이터(클레임)를 포함한다.
  • 서명(Signature): 토큰의 무결성을 검증하는 데 사용된다.

Flask와 JWT 설정하기

먼저 필요한 패키지를 설치한다:

pip install Flask Flask-JWT-Extended

이제 Flask 애플리케이션을 설정하고 JWT를 구성하겠다.


from flask import Flask, request, jsonify
from flask_jwt_extended import JWTManager, create_access_token
import datetime
import mysql.connector
from mysql.connector import Error

app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'your_jwt_secret_key'  # JWT 비밀 키 설정
jwt = JWTManager(app)
    

회원가입 API 만들기

회원가입 API는 사용자가 이메일과 비밀번호를 통해 회원가입을 할 수 있도록 한다. 비밀번호는 해싱하여 데이터베이스에 저장한다.

1. 데이터베이스 설정

MySQL 데이터베이스와 연결 설정을 한다. 여기서는 간단한 예제로 설명한다:


def get_connection():
    return mysql.connector.connect(
        host='localhost',
        user='root',
        password='password',
        database='mydatabase'
    )
    

2. 비밀번호 해싱

비밀번호를 안전하게 저장하기 위해 해싱한다:


from werkzeug.security import generate_password_hash, check_password_hash

def hash_password(password):
    return generate_password_hash(password)

def check_password(password, hashed):
    return check_password_hash(hashed, password)
    

3. 회원가입 엔드포인트

이제 회원가입 엔드포인트를 구현하겠다:


@app.route('/register', methods=['POST'])
def register():
    data = request.get_json()
    
    email = data.get('email')
    password = data.get('password')
    username = data.get('username')

    if not email or not password or not username:
        return jsonify({'result': 'fail', 'message': 'Missing required parameters'}), 400

    hashed_password = hash_password(password)

    try:
        connection = get_connection()
        cursor = connection.cursor()
        query = "INSERT INTO users (email, username, password) VALUES (%s, %s, %s)"
        cursor.execute(query, (email, username, hashed_password))
        connection.commit()
        user_id = cursor.lastrowid
        cursor.close()
        connection.close()

        access_token = create_access_token(identity=user_id, expires_delta=datetime.timedelta(days=1))
        return jsonify({'result': 'success', 'access_token': access_token}), 201

    except Error as e:
        return jsonify({'result': 'fail', 'message': str(e)}), 500
    

테스트하기

POSTMAN을 사용하여 회원가입 API를 테스트할 수 있다:

  • Method: POST
  • URL: http://127.0.0.1:5000/register
  • Body: Raw, JSON 형식

{
    "email": "test@example.com",
    "username": "testuser",
    "password": "password123"
}
    

회원가입이 성공하면 JWT 토큰이 반환된다. 이 토큰을 사용하여 이후 요청에서 사용자를 인증할 수 있다.

결론

이 블로그 포스트에서는 Flask와 JWT를 사용하여 간단한 회원가입 API를 만드는 방법을 알아보았다. JWT를 사용하면 안전하게 사용자를 인증하고, 토큰을 통해 클라이언트와 서버 간의 통신을 보호할 수 있다.