동적토큰 JWT가 아닌 정적토큰 X-Token에 고정된 값을 사용하여 토큰헤더인증을 구현해 보겠다.
POST, PATCH, GET에 대한 토큰 헤더를 넣음으로써 토큰헤더인증을 통해 요청을 완료한다.
1. 토큰 생성
fake_secret_token = "hongsun"
2. 질문생성 POST요청
# 질문 생성
@app.post("/questions/", response_model=QuestionCreate)
async def create_question(question: QuestionCreate, x_token: Annotated[str,Header()]):
if x_token != fake_secret_token:
raise HTTPException(status_code=400, detail="유효하지 않은 X-TOKEN header")
question_obj = Question(**question.dict())
await question_obj.insert()
return question_obj
3. 질문 수정 PATCH요청
# 질문 수정
@app.patch("/questions/{question_id}/", response_model=QuestionUpdate)
async def update_question(question_id: str, question_update: QuestionUpdate,x_token: Annotated[str,Header()]):
question = await Question.get(document_id=question_id)
if x_token != fake_secret_token:
raise HTTPException(status_code=400, detail="유효하지 않은 X-TOKEN header")
if not question:
raise HTTPException(status_code=404, detail="Question not found")
# 질문 수정
if question_update.title is not None:
question.title = question_update.title
if question_update.description is not None:
question.description = question_update.description
await question.save()
return question
4. 질문 및 답변 조회 GET요청
# 질문 및 답변 조회
@app.get("/questions/{question_id}/", response_model=Question)
async def read_question(question_id: str, x_token:Annotated[str,Header()]):
question = await Question.get(document_id=question_id)
if question is None:
raise HTTPException(status_code=404, detail="질문이 삭제되었거나 새로만드세요",)
if x_token != fake_secret_token:
raise HTTPException(status_code=400, detail="유효하지 않은 X-TOKEN header")
return question
'portfolio' 카테고리의 다른 글
Django 댓글 비활성화 (0) | 2024.05.08 |
---|---|
FASTAPI OAUTH2.0 인증, 인코딩 디코딩을 통한 JWT 생성과 검증, 리프레시 토큰 생성 (0) | 2024.03.25 |
FASTAPI와 mongoDB ODM을 활용한 CRUD , SEARCH 엔드포인트 구축 (0) | 2024.03.07 |
리액트 노드 socket.io를 활용한 실시간 영화예매시스템 구축 (0) | 2024.03.07 |
장고(DRF) + 리액트 REACT.JS 포트폴리오 2 (0) | 2024.02.27 |