vsc코드
# app.py 파일
#인폴트 부분
from resources.user import UserLoginResource
#작업 부분
app = Flask(__name__)
# 환경변수 셋팅
app.config.from_object(Config)
# JWT 토큰 라이브러리 만들기
app.config["JWT_SECRET_KEY"] = "super-secret"
jwt = JWTManager(app)
api = Api(app)
api.add_resource(UserLoginResource, '/users/login')
#user,py 파일
# 작업부분
class UserLoginResource(Resource) :
def post(self) :
# 1. 클라이언트로부터 body로 넘어온 데이터를 받아온다.
# {
# "email": "a123@gmail.com",
# "password": "1234"
# }
data = request.get_json()
# 2. 이메일로, DB에 이 이메일과 일치하는 데이터를
# 가져온다.
try :
connection = get_connection()
query = '''select *
from user
where email = %s;'''
record = (data['email'] , )
# select 문은, dictionary = True 를 해준다.
cursor = connection.cursor(dictionary = True)
cursor.execute(query, record)
# select 문은, 아래 함수를 이용해서, 데이터를 가져온다.
result_list = cursor.fetchall()
print(result_list)
# 중요! 디비에서 가져온 timestamp 는
# 파이썬의 datetime 으로 자동 변경된다.
# 문제는! 이데이터를 json 으로 바로 보낼수 없으므로,
# 문자열로 바꿔서 다시 저장해서 보낸다.
i = 0
for record in result_list :
result_list[i]['createdAt'] = record['createdAt'].isoformat()
i = i + 1
cursor.close()
connection.close()
except mysql.connector.Error as e :
print(e)
cursor.close()
connection.close()
return {"error" : str(e)}, 503
# 3. result_list 의 행의 갯수가 1개이면,
# 유저 데이터를 정상적으로 받아온것이고
# 행의 갯수가 0이면, 요청한 이메일은, 회원가입이
# 되어 있지 않은 이메일이다.
if len(result_list) != 1 :
return {'error' : '회원가입이 안된 이메일입니다.', 'error_no' : 6}, 400
# 4. 비밀번호가 맞는지 확인한다.
user_info = result_list[0]
# data['password'] 와 user_info['password']를 비교
check = check_password(data['password'] , user_info['password'])
if check == False :
return {'error' : '비밀번호가 맞지 않습니다.', 'error_no' : 7}, 400
# JWT 억세스 토큰 생성해서 리턴해준다.
access_token = create_access_token(user_info['id'])
# expires_delta=datetime.timedelta(minutes=1))
return {'result' : 'success',
'access_token' : access_token}, 200

| 영화 추천 서비스 API - 영화 목록 가져오기 (0) | 2022.06.23 |
|---|---|
| 영화 추천 서비스 API - 로그아웃 (0) | 2022.06.23 |
| 영화 추천 서비스 API - 회원가입 (0) | 2022.06.23 |
| Flask : JWT 로그아웃 API 사용방법 (0) | 2022.06.21 |
| Flask : JWT 토큰 유효기간 만료시키는 방법 (0) | 2022.06.20 |