[python] Flask-RESTful에서 로그인 기능 구현 방법

이번 블로그 포스트에서는 Flask-RESTful을 사용하여 로그인 기능을 구현하는 방법을 알아보겠습니다.

필요한 패키지 설치하기

먼저, Flask-RESTful을 사용하기 위해 다음 명령을 사용하여 필요한 패키지를 설치해야 합니다.

pip install flask-restful

사용자 모델 생성하기

로그인 기능을 구현하기 위해 사용자 모델을 생성해야 합니다. 일반적으로 사용자 모델에는 사용자의 아이디와 비밀번호가 포함되어야 합니다.

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    password = db.Column(db.String(80))

로그인 API 엔드포인트 생성하기

이제 로그인 API 엔드포인트를 생성합니다. 로그인을 위해서는 사용자가 제공한 아이디와 비밀번호를 검증해야 합니다. 검증에 성공하면 JWT(JSON Web Token)를 생성하고 클라이언트에게 반환합니다.

from flask import Flask, request
from flask_restful import Resource, Api
from flask_jwt_extended import JWTManager, create_access_token

app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret-key'
jwt = JWTManager(app)
api = Api(app)

class LoginResource(Resource):
    def post(self):
        # 클라이언트로부터 전달된 아이디와 비밀번호 가져오기
        username = request.json.get('username')
        password = request.json.get('password')

        # 아이디와 비밀번호 검증하기
        user = User.query.filter_by(username=username, password=password).first()
        if not user:
            return {'message': 'Invalid username or password'}, 401

        # JWT 생성하기
        access_token = create_access_token(identity=user.id)

        # 생성된 JWT 반환하기
        return {'access_token': access_token}, 200

# 로그인 API 엔드포인트 등록하기
api.add_resource(LoginResource, '/login')

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

테스트하기

서버를 실행시킨 후 아래와 같이 POST /login 요청을 보내서 로그인을 테스트할 수 있습니다.

curl --request POST \
  --url http://localhost:5000/login \
  --header 'content-type: application/json' \
  --data '{
    "username": "john",
    "password": "my_password"
}'

결론

이제 Flask-RESTful을 사용하여 로그인 기능을 구현하는 방법을 알아봤습니다. 로그인 API 엔드포인트를 생성하고, 사용자 모델을 만들어서 사용자의 아이디와 비밀번호를 검증 후 JWT를 생성하여 반환하는 방식으로 구현할 수 있습니다. Flask-RESTful을 사용하여 다양한 기능을 구현할 수 있으므로, 관련 기능을 개발할 때마다 유용하게 활용할 수 있습니다.


참고 문서: Flask-RESTful 공식 문서