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를 사용하면 안전하게 사용자를 인증하고, 토큰을 통해 클라이언트와 서버 간의 통신을 보호할 수 있다.
'RestfulAPI' 카테고리의 다른 글
AWS Serverless Framework 설치 방법 (0) | 2024.05.23 |
---|---|
RestfulAPI Flask에서 JWT 사용하여 로그인 및 로그아웃하기 (2) | 2024.05.23 |
RestfulAPI Hashing 을 이용하여 단방향 암호화 하는방법 (0) | 2024.05.23 |
RestfulAPI Python MySQL Connector 딜리트 방법과 코드 예제 (0) | 2024.05.22 |
Restful API MySQL PUT 요청을 처리하는 방법(수정하기) (0) | 2024.05.22 |