파이썬과 JWT를 활용한 소셜 미디어 연동 로그인 구현 방법

소셜 미디어 연동 로그인은 사용자가 소셜 미디어 계정을 사용하여 애플리케이션에 로그인할 수 있는 인기 있는 방법입니다. 이 기능을 파이썬과 JWT(Json Web Token)를 활용하여 구현하는 방법에 대해 알아보겠습니다.

1. 소셜 미디어 API 설정

먼저, 소셜 미디어 플랫폼에서 앱을 생성하고 API 키를 발급받아야 합니다. 주로 사용되는 소셜 미디어 플랫폼은 페이스북, 구글, 트위터 등이 있습니다. 각각의 소셜 미디어 플랫폼은 API 사용을 위한 문서를 제공하고 있으니 해당 문서를 참고하여 API 키를 발급받으세요.

2. 파이썬 환경 설정

프로젝트 디렉토리를 생성하고 파이썬 가상 환경을 설정합니다. 가상 환경을 사용하는 이유는 프로젝트마다 필요한 패키지 버전이 달라질 수 있기 때문입니다. 가상 환경을 설정하면 패키지 버전 충돌 문제를 피할 수 있습니다.

python -m venv myenv # 파이썬 가상 환경 생성
source myenv/bin/activate # 가상 환경 활성화 (윈도우에서는 myenv\Scripts\activate)

3. 필요한 패키지 설치

아래와 같이 필요한 패키지들을 설치합니다.

pip install flask Flask-JWT requests

4. Flask 애플리케이션 설정

app.py 파일을 생성하고 아래와 같이 기본적인 Flask 애플리케이션을 설정합니다.

from flask import Flask, request
from flask_jwt import JWT, jwt_required

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'

jwt = JWT(app)

@app.route('/')
def home():
    return 'Hello, World!'

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

5. 소셜 미디어 로그인 연동

이제 소셜 미디어 로그인을 연동해보겠습니다. 페이스북을 예시로 설명하겠습니다.

5.1 페이스북 로그인 URL 생성

페이스북에서는 사용자가 페이스북 로그인을 하고 권한을 확인한 후 애플리케이션으로 리다이렉트할 URL을 생성해야 합니다.

from flask import redirect

@app.route('/login/facebook')
def login_facebook():
    redirect_uri = 'http://your-domain.com/callback/facebook'
    login_url = f'https://www.facebook.com/v3.0/dialog/oauth?client_id={FACEBOOK_CLIENT_ID}&redirect_uri={redirect_uri}&scope=email'

    return redirect(login_url)

5.2 콜백 URL 처리

사용자가 로그인을 완료하면 페이스북은 애플리케이션으로 인증 코드를 전달합니다. 이 인증 코드를 사용하여 토큰을 발급받아야 합니다.

from flask import jsonify

@app.route('/callback/facebook')
def handle_facebook_callback():
    code = request.args.get('code')
    redirect_uri = 'http://your-domain.com/callback/facebook'  # 이전과 동일한 URL 사용

    token_url = 'https://graph.facebook.com/v3.0/oauth/access_token'
    token_params = {
        'client_id': FACEBOOK_CLIENT_ID,
        'client_secret': FACEBOOK_CLIENT_SECRET,
        'code': code,
        'redirect_uri': redirect_uri
    }
    token_response = requests.get(token_url, params=token_params)
    token_data = token_response.json()
    access_token = token_data['access_token']

    # access_token을 사용하여 사용자 정보 요청
    profile_url = 'https://graph.facebook.com/v3.0/me'
    profile_params = {
        'access_token': access_token,
        'fields': 'name,email'
    }
    profile_response = requests.get(profile_url, params=profile_params)
    profile_data = profile_response.json()

    # JWT 토큰 생성
    username = profile_data['name']
    email = profile_data['email']
    encoded_token = jwt.encode({'username': username, 'email': email}, app.config['SECRET_KEY'])

    return jsonify({'access_token': encoded_token})

6. JWT 토큰 사용

JWT를 통해 발급된 토큰을 이용해 로그인 여부를 확인하거나 인증이 필요한 API 요청을 처리할 수 있습니다.

@app.route('/protected')
@jwt_required()
def protected_route():
    return 'This is a protected route.'

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

위와 같이 @jwt_required() 데코레이터를 사용하여 인증이 필요한 요청을 처리하고, access_token을 헤더에 담아 요청을 보내면 해당 요청이 토큰 인증을 거치게 됩니다.

마무리

파이썬과 JWT를 활용하면 소셜 미디어 연동 로그인을 간단하고 안전하게 구현할 수 있습니다. 이를 통해 사용자의 로그인 경험을 향상시키고 애플리케이션의 보안성을 높일 수 있습니다.

#python #JWT #소셜미디어 #로그인