flask JWT test
본격 프로젝트를 들어가기 앞서 서면 피드백을 받았다.
우리조에서 수정기능 해본 사람이 나밖에 없어서 그냥 쿼리스프링으로
특정 데이터 가져와 수정하는 걸 해본 내가 쿼리스프링 수정 uri로 이야기해 그렇게 작성해서 제출했었다.
서면피드백받고 다시 프로젝트 발제보니 RESTful API를 사용하라고 권장..
더 공부해야 할 내용
- JWT
- RESTful API URI
나는 오늘 flask-mysql 연동했던 users 테이블로 토큰 생성해서 출력해보는 거랑
특정 토큰 값을 활용해 접근하는 것 까지 해봤다.
하지만 jwt의 header, payload, verify signature은 생소하고 구현해봤지만, 이걸 어떻게 활용해야 할지 감이 안잡힌다.
📄 MySQL
USE flask_test;
CREATE TABLE users(
id int NOT NULL AUTO_INCREMENT,
email varchar(200),
password varchar(200),
PRIMARY key(id)
);
INSERT
INTO
users
VALUES(
'xxxxhh@naver.com',
'87654321'
),
(
'dbyeon@naver.com',
'12345678'
),
(
'1234',
'qwer'
),;

나의 users 테이블에 회원등록했다는 가정하에 id(email), pw insert
📄 app.py
# flask, flask-jwt-extended, pymysql 라이브러리 설치
from flask import Flask, render_template, request, jsonify
import pymysql
import json
from flask_jwt_extended import *
application = Flask(import_name = __name__)
# 토큰 생성에 사용될 Secret Key를 flask 환경 변수에 등록
application.config.update(
DEBUG = True,
JWT_SECRET_KEY = "I'M IML"
)
# JWT 확장 모듈을 flask 어플리케이션에 등록
jwt = JWTManager(application)
@application.route("/")
def test_test():
return "<h1>Hello, I'm IML!</h1>"
필요한 라이브러리 설치
로그인
📄 app.py
@application.route("/login", methods=['POST'])
def login_proc():
# 클라이언트로부터 요청된 값
input_data = request.get_json()
print(input_data)
user_id = input_data['id']
user_pw = input_data['pw']
print('get_users from mysql')
db = pymysql.connect(host='localhost', user='root', db='flask_test', password='12345678', charset='utf8')
curs = db.cursor()
sql = """
SELECT *
FROM users u
where u.email = %s
"""
curs.execute(sql, user_id)
rows = curs.fetchall()
print(rows)
json_str = json.dumps(rows, indent=4, sort_keys=True, default=str)
db.commit()
db.close()
# 아이디, 비밀번호가 일치하는 경우
if (user_id == rows[0][0] and
user_pw == rows[0][1]):
access_token = create_access_token(identity=user_id,
expires_delta=False)
print(access_token)
return jsonify(
result="success",
# 검증된 경우, access 토큰 반환
access_token=create_access_token(identity=user_id,
expires_delta=False)
)
# 아이디, 비밀번호가 일치하지 않는 경우
else:
return jsonify(
result="Invalid Params!"
)
입력받은 id값이 있다면 mysql에서 값을 가져올 것이고 그렇지 않다면 가져오지 못할 예정!
📌 postman post test


토큰 유효성 검사
📄 app.py
@application.route('/user_only', methods=["GET"])
@jwt_required()
def user_only():
print("get jwt")
cur_user = get_jwt_identity()
print(cur_user) #아이디 값
if cur_user is None:
return "User Only!"
else:
return "Hi!," + cur_user
if __name__ == '__main__':
application.run(host = '0.0.0.0',
port = 5000,
debug = True)
📌 postman get test
header value값에 토큰값을 넣을때 Bearer 붙여줘야 한다.

📌 jwt.io
아이디 1234의 jwt.io다.

jwt는 header, payload, signature로 이뤄졌다.
- header : 토큰 타입과 사용되는 해시 알고리즘 지정
- payload : jwt를 통해 실제 서버 간에 전송하고자 하는 데이터
- signature : jwt가 원본 그대로라는 것을 확인할 때 사용하는 부분
이제 token값을 접근해 decode해서 아이디 정보로 접근해 작업하는 프로젝트를 찾아 작업하면 될듯하다!
참고한 블로그 : [Flask 입문] JWT 토큰을 이용해서 로그인/인증 기능을 만들어 보자 : 네이버 블로그 (naver.com)
[Flask 입문] JWT 토큰을 이용해서 로그인/인증 기능을 만들어 보자
이번 포스팅에서는 Flask에서 사용자 인증을 비롯하여 간단한 로그인 API를 만들어 보자. 해당 포스팅...
blog.naver.com
'TIL' 카테고리의 다른 글
내일배움캠프 4기_Flask JWT MySQL 16일차 TIL (0) | 2022.12.05 |
---|---|
flask JWT cookie (0) | 2022.12.04 |
내일배움캠프 4기_DB특강 15일차 TIL (0) | 2022.12.02 |
내일배움캠프 4기_DB특강 14일차 TIL (0) | 2022.12.01 |
내일배움캠프 4기_DB특강 13일차 TIL (0) | 2022.11.30 |