Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 유데미 러닝크루
- command
- 프로그래밍
- 가상환경
- 파이썬
- freezeD
- copyWIth
- ListTile
- riverpod
- python
- 도서
- 리눅스
- 유데미
- dart
- Code Generation
- 책
- 디자인패턴
- 명령어
- 리버팟
- 유데미 코리아
- linux
- 개발자
- 코딩
- 다트
- 맥
- 플러터
- 개발
- flutter
- vscode
- ExpansionTile
Archives
- Today
- Total
승상의 코딩 블로그
토큰 기능 테스트를 위한 간단한 Flask 서버 만들기 본문
플러터로 토큰 기능도 구현해보고 싶어서, 토큰을 생성하고 토큰을 체크하는 간단한 Flask 서버를 만들어 봤다.
- /auth/login : 토큰 발급
- /auth/check : 발급된 토큰 체크
코드
* 실제 운용할 때 사용하는 코드가 아닙니다. 토큰 기능 테스트를 위해 만들었기 때문에 보안 등 많은 것들이 빠져있습니다.
from datetime import datetime, timedelta
from http import HTTPStatus
import jwt
from flask import Flask, jsonify, request
app = Flask(__name__)
# 로그인 시 ID, PASSWORD 는 고정한다.
ID = "sm"
PASSWORD = "1234"
SECRET_KEY = "KEY"
@app.route('/auth/login', methods=['POST'])
def login():
# 토큰을 발급할 때 사용하는 함수이다.
# id, pw 는 form 데이터로 전송된다고 고려한다.
# Return 값
# {
# accessToken : XXXXXX
# }
userId = request.form['userId']
userPw = request.form['userPw']
if ID != userId:
return 'Not Matched', HTTPStatus.FORBIDDEN
if userPw != PASSWORD:
return 'Not Matched', HTTPStatus.FORBIDDEN
# Token 을 발급하는 함수이다. 유효기간은 5분으로 설정한다.
token = jwt.encode(
{'user_id': userId, 'exp':datetime.utcnow() + timedelta(minutes=5)},
SECRET_KEY, algorithm = 'HS256')
return jsonify({"accessToken": token})
@app.route('/auth/check', methods=['POST'])
def check():
# 발근된 토큰을 체크해보기 위한 함수이다.
# 토큰은 요청 헤더의 Authorization 에 있다고 가정한다.
authHeader = request.headers.get('Authorization')
if authHeader == None:
return '', HTTPStatus.FORBIDDEN
try:
jwt.decode(authHeader, SECRET_KEY, algorithms=['HS256'])
except jwt.ExpiredSignatureError:
# Token 의 유효기간이 지났을 경우 에러를 발생시키기 때문에 에러처리를 해준다.
return 'EXPIRED_TOKEN', HTTPStatus.FORBIDDEN
return "GOOD", HTTPStatus.OK
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000, debug=True)
테스트
POSTMAN 이라는 프로그램을 통해 누군가 아이디와 비밀번호를 전송하여 테스트 해보기로 했다.
127.0.0.1:5000/auth/login 으로 URI 를 설정하고 Body 에 form-data 형식으로 userId, userPw 를 넣고 Send 버튼을 누른다.
그러면 하단에 요청에 대한 응답이 뜬다. accessToken 이 정상적으로 발급되었음을 확인할 수 있다.
발급된 토큰을 Header 의 Authorization 항목을 추가하여 127.0.0.1:5000/auth/check 로 Send 한다.
그러면 정상적으로 GOOD 이라는 응답을 받는 것을 볼 수 있다.
POSTMAN 에서 토큰을 붙여넣지 않고 자동으로 업데이트 할려면...
2023.08.08 - [Flutter (플러터)] - Flask 서버 토큰 테스트 시, Postman 의 다른 API 에 토큰 값 자동 갱신
반응형
'Flutter (플러터)' 카테고리의 다른 글
[Flutter] TextFormField 의 입력값 가져오기 (0) | 2023.08.09 |
---|---|
Flask 서버 토큰 테스트 시, Postman 의 다른 API 에 토큰 값 자동 갱신 (0) | 2023.08.08 |
[Flutter] Inkwell, 터치가능한 위젯으로 변경 (vs GestureDetector) (0) | 2023.08.06 |
[Flutter] 탭 사용하기 (TabBar, TabBarView) (0) | 2023.08.06 |
[Flutter] SingleChildScrollView, 스크롤 가능한 위젯 (0) | 2023.08.06 |
Comments