FastAPI 프로젝트 진행(로그아웃 기능 구현) - 92

2023. 1. 29. 20:49·Develop/FastAPI
728x90
SMALL

1. auth.py 새로운 API 생성

@router.get("/logout")
async def logout(request: Request):
    msg = "logout Successful"
    response = templates.TemplateResponse("login.html", {"request":request, "msg":msg})
    response.delete_cookie(key="access_token")
    return response
response를 직접 return
delete_cookie로 현재 cookie에 저장된 JWT를 삭제

 

2. 웹 확인

API 호출을 통해서 알럿과 함께 cookie상의 데이터가 없어진 것을 확인할 수 있다.

 

3. navbar.html에 로그아웃 버튼 추가

<div>
    <nav class="navbar navbar-expand-md navbar-dark main-color fixed-top">
        <a class="navbar-brand" href="#">Todo App</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
                aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarNav">
            <ul class="navbar-nav">
               {% if user %}
                <li class="nav-item active">
                    <a class="nav-link" href="#">Home</a>
                </li>
               {% endif %}
            </ul>

           <ul class="navbar-nav ml-auto">
              {% if user %}
              <li class="nav-item m-1">
                 <a type="button" class="btn btn-outline-light" href="/auth/logout">Logout</a>
              </li>
              {% endif %}
           </ul>
        </div>
    </nav>
</div>
이렇게 했을 때 로그인을 해도 로그아웃 버튼을 볼 수 없다.
사용자(user 데이터)를 확인하는 작업이 필요하다.

 

4. todos.py TemplateResponse를 받는 API 수정

@router.get("/", response_class=HTMLResponse)
async def read_all_by_user(request: Request, db: Session = Depends(get_db)):

    user = await get_current_user(request)
    if user is None:
        return RedirectResponse(url="/auth", status_code=status.HTTP_302_FOUND)

    todos = db.query(models.Todos).filter(models.Todos.owner_id == user.get("id")).all()
    return templates.TemplateResponse("home.html", {"request":request, "todos":todos, "user": user})


@router.get("/add-todo", response_class=HTMLResponse)
async def add_new_todo(request: Request):
    user = await get_current_user(request)
    if user is None:
        return RedirectResponse(url="/auth", status_code=status.HTTP_302_FOUND)

    return templates.TemplateResponse("add-todo.html", {"request":request, "user": user})


@router.get("/edit-todo/{todo_id}", response_class=HTMLResponse)
async def edit_todo(request: Request, todo_id: int, db: Session = Depends(get_db)):

    user = await get_current_user(request)
    if user is None:
        return RedirectResponse(url="/auth", status_code=status.HTTP_302_FOUND)

    todo = db.query(models.Todos).filter(models.Todos.id == todo_id).first()

    return templates.TemplateResponse("edit-todo.html", {"request":request, "todo": todo, "user": user})
마지막 응답을 return 할 때 user 데이터도 같이 return 한다.

로그아웃을 눌렀을 때 자동으로 로그인 페이지로 돌아가는 것을 확인할 수 있다.
728x90
SMALL
저작자표시 비영리 변경금지

'Develop > FastAPI' 카테고리의 다른 글

FastAPI 프로젝트 진행(코드 정리) - 94  (0) 2023.01.29
FastAPI 프로젝트 진행(회원가입 기능 구현) - 93  (0) 2023.01.29
FastAPI 프로젝트 진행(로그인 추가, 쿠키 세션) - 91  (0) 2023.01.29
FastAPI 프로젝트 진행(로그인 기능 구현 API) - 90  (0) 2023.01.29
FastAPI 프로젝트 진행(완료 버튼 작동, RedirectResponse) - 89  (0) 2023.01.29
'Develop/FastAPI' 카테고리의 다른 글
  • FastAPI 프로젝트 진행(코드 정리) - 94
  • FastAPI 프로젝트 진행(회원가입 기능 구현) - 93
  • FastAPI 프로젝트 진행(로그인 추가, 쿠키 세션) - 91
  • FastAPI 프로젝트 진행(로그인 기능 구현 API) - 90
동석해요
동석해요
공부하고 싶은게 많은, 사소한 IT 지식들 공유
    250x250
  • 동석해요
    개발로 자기계발
    동석해요
  • 전체
    오늘
    어제
    • 분류 전체보기 (226)
      • Develop (126)
        • 기초지식 (12)
        • FastAPI (102)
        • Django (11)
      • Database & Data (62)
        • 기초지식 (16)
        • MySQL (29)
        • PostgreSQL (8)
        • 데이터 분석 (9)
      • 인공지능 (11)
        • PyTorch (9)
      • Cloud (8)
        • AWS (4)
        • GCP (2)
      • 버그처리 (14)
      • 회고 & 일상 (5)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
동석해요
FastAPI 프로젝트 진행(로그아웃 기능 구현) - 92
상단으로

티스토리툴바