Skip to content

Commit 0c5c42b

Browse files
updated logout functionality
1 parent 94111e0 commit 0c5c42b

File tree

5 files changed

+20
-13
lines changed

5 files changed

+20
-13
lines changed

src/routers/auth/auth_routes.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from fastapi.responses import HTMLResponse
44
from fastapi.security.oauth2 import OAuth2PasswordRequestForm
55
from sqlalchemy.orm import Session
6+
from src import app
67

78
import src.schemas as schemas
89
import src.models as models
@@ -34,15 +35,14 @@ async def login(user_credentials: OAuth2PasswordRequestForm = Depends(), db: Ses
3435
"token_type" : "bearer"
3536
}
3637

37-
38-
@router.post('/logout', response_model=schemas.Token)
38+
@router.get('/logout', response_model=schemas.Token)
3939
async def logout(request: Request, response_model=HTMLResponse):
4040
auth_token = request.cookies.get('Authorization')
4141

4242
if (auth_token):
43-
request.cookies.pop('Authorization')
44-
45-
return RedirectResponse(router.url_path_for('signin'))
46-
# verify = oauth2.get_current_user(auth_token)
43+
redirect = RedirectResponse(app.ui_router.url_path_for('signin'))
44+
redirect.set_cookie('Authorization', '')
45+
return redirect
46+
47+
return RedirectResponse(app.ui_router.url_path_for('home'))
4748

48-
return RedirectResponse(router.url_path_for('home'))

src/routers/ui_routes.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
import requests as url_requests
21
from fastapi import APIRouter, Request, Depends, status, Response, HTTPException
32
from fastapi.responses import RedirectResponse
43
from fastapi.responses import HTMLResponse
54
from fastapi.templating import Jinja2Templates
65
from pathlib import Path
76
import http3
87

8+
from sqlalchemy.orm import Session
9+
from src.helpers.database import get_db
10+
911
import src.oauth2 as oauth2
1012
from src.config import Settings
1113
from src import models, schemas
@@ -21,18 +23,18 @@
2123

2224

2325
@router.get("/", status_code=status.HTTP_200_OK)
24-
async def home(request: Request, response_model=HTMLResponse):
25-
26+
async def home(request: Request, response_model=HTMLResponse, db: Session = Depends(get_db)):
2627
auth_token = request.cookies.get('Authorization')
28+
2729
if (auth_token):
28-
# verify = oauth2.get_current_user(auth_token)
30+
token_type, jwt_token = auth_token.split(' ')
31+
redirect = RedirectResponse(router.url_path_for('signin'))
32+
oauth2.verify_access_token(jwt_token, HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Invalid Credentials"))
2933
return TEMPLATES.TemplateResponse("home/index.html", {"request" : request})
3034

3135
return RedirectResponse(router.url_path_for('signin'))
3236

3337

34-
35-
3638
@router.get("/login", status_code=status.HTTP_200_OK)
3739
async def signin(request: Request, response_model=HTMLResponse):
3840
return TEMPLATES.TemplateResponse("accounts/login.html", {"request" : request})
@@ -85,6 +87,7 @@ async def register(request: Request, response_model=HTMLResponse):
8587

8688
if (response.status_code==201):
8789
redirect = RedirectResponse(url=router.url_path_for('signin'))
90+
# default redirect is 307, which maintains the reused 'POST' indictation, 302 changes it to 'GET'
8891
redirect.status_code = 302
8992
return redirect
9093

src/sql_app.db

0 Bytes
Binary file not shown.

src/templates/includes/navigation.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
</div>
1919
<ul class="navbar-nav justify-content-end">
2020
<li class="nav-item d-flex align-items-center">
21+
<a href="{{ url_for('logout') }}" class="nav-link text-body font-weight-bold px-0">
2122
<i class="fa fa-user me-sm-1"></i>
2223
<span class="d-sm-inline d-none">LOGOUT</span>
24+
</a>
2325
</li>
2426
<li class="nav-item d-xl-none ps-3 d-flex align-items-center">
2527
<a href="javascript:;" class="nav-link text-body p-0" id="iconNavbarSidenav">

src/templates/includes/sidebar.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ <h6 class="ps-4 ms-2 text-uppercase text-xs font-weight-bolder opacity-6">Accoun
136136
</a>
137137
</li>
138138
<li class="nav-item">
139+
<a class="nav-link " href="{{ url_for('logout') }}">
139140
<div class="icon icon-shape icon-sm shadow border-radius-md bg-white text-center me-2 d-flex align-items-center justify-content-center">
140141
<svg width="12px" height="20px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
141142
<title>spaceship</title>
@@ -154,6 +155,7 @@ <h6 class="ps-4 ms-2 text-uppercase text-xs font-weight-bolder opacity-6">Accoun
154155
</svg>
155156
</div>
156157
<span class="nav-link-text ms-1">Logout</span>
158+
</a>
157159
</li>
158160
</ul>
159161
</div>

0 commit comments

Comments
 (0)