JWT 토큰 있어도 되고, 없어도 되는 API 만들기
-> @jwt_required(optional=True)
앱에서 api를 사용하는데 로그인 한 사용자도 볼 수 있고,
로그인하지 않은 사용자도 볼 수 있는 코드를 만들고 싶었다.
찾아보니, optional=True 파라미터를 사용하면 해결되었다.
@jwt_required(optional=True) 활용한 코드
class FlowersListResource(Resource):
# 오늘의 꽃 가져오는 API
@jwt_required(optional=True)
def get(self) :
# 1. 클라이언트가 보낸 데이터가 있으면 받아준다.
userId = get_jwt_identity()
# 2. DB로 부터 데이터를 가져온다.
try :
connection = get_connection()
# 문자열 더하라는 뜻 '''+data변수명+'''
query = '''
select id flowerId, flowerName, flowerPrice, flowerPhotoUrl, createdAt, updatedAt, status, origin, if( w.userid = %s , 1, 0) as isWish
from flower f
left join wish w
on f.id = w.flowerId;
'''
# 사용자 ID가 None인 경우를 처리
if userId is None:
record = (0,) # 일반 사용자를 위한 기본값
else:
record = (userId,)
cursor = connection.cursor(dictionary=True)
cursor.execute( query, record )
# 데이터를 가져와야한다.
result_list = cursor.fetchall()
cursor.close()
connection.close()
except Error as e:
# try에서 에러가 발생하면 클라이언트한테 리턴해준다.
# json 은 숫자 아니면 문자열만 있다!!!
if cursor is not None :
cursor.close()
if connection is not None :
connection.close()
return {'result':'fail', 'error':str(e)}, 500
# 3. 클라이언트에게 json만들어서 응답한다.
i = 0
for row in result_list :
result_list[i]['createdAt']= row['createdAt'].isoformat()
result_list[i]['updatedAt']= row['updatedAt'].isoformat()
i = i + 1
print()
print(result_list)
return {'items' : result_list,
'count' : len(result_list),
'result' : 'success'}
포스트맨으로 확인했을 로그인 한 사용자와 안 한 사용자 모두 데이터를 잘 받아오는 것을 확인할 수 있었다!!