Update main.py
Browse files
main.py
CHANGED
@@ -3,6 +3,7 @@
|
|
3 |
from fastapi import FastAPI, Form, Depends, HTTPException
|
4 |
from fastapi.requests import Request
|
5 |
from fastapi.responses import HTMLResponse, RedirectResponse
|
|
|
6 |
from fastapi.templating import Jinja2Templates
|
7 |
from sqlalchemy.orm import Session
|
8 |
from auth import verify_token, oauth2_scheme, auth_views, register, UserCreate, authenticate_user, get_user_by_verification_token
|
@@ -43,52 +44,60 @@ async def login(request: Request):
|
|
43 |
@app.post("/login", response_class=HTMLResponse)
|
44 |
async def login_post(
|
45 |
request: Request,
|
46 |
-
|
47 |
-
password: str = Form(...),
|
48 |
db: Session = Depends(get_db)
|
49 |
):
|
|
|
|
|
|
|
50 |
# Validate the email and password
|
51 |
if not email or not password:
|
52 |
raise HTTPException(status_code=400, detail="Invalid email or password")
|
53 |
|
54 |
-
# Check user authentication
|
55 |
user = authenticate_user(db, email, password)
|
56 |
-
|
57 |
if user is not None:
|
58 |
# Authentication succeeded
|
59 |
# Create an access token and handle login success
|
60 |
-
# You can use your access token creation logic here
|
61 |
access_token = auth_views.create_access_token(
|
62 |
data={"sub": user.email},
|
63 |
expires_delta=timedelta(minutes=auth_views.ACCESS_TOKEN_EXPIRE_MINUTES),
|
64 |
)
|
65 |
-
|
|
|
66 |
user.token = access_token
|
|
|
|
|
67 |
db.commit()
|
68 |
-
|
69 |
-
|
|
|
70 |
else:
|
71 |
# Authentication failed
|
72 |
# Handle login failure, e.g., display an error message
|
73 |
-
return templates.TemplateResponse("login.html", {"request": request, "error_message": "Invalid email or password"})
|
74 |
-
#return RedirectResponse("/login?error=Authentication failed")
|
75 |
|
76 |
@app.get("/register", response_class=HTMLResponse)
|
77 |
async def register_get(request: Request):
|
78 |
return templates.TemplateResponse("register.html", {"request": request})
|
79 |
|
|
|
80 |
@app.post("/register", response_class=HTMLResponse)
|
81 |
async def register_post(
|
82 |
request: Request,
|
83 |
-
|
84 |
-
email: str = Form(...),
|
85 |
-
password: str = Form(...),
|
86 |
-
confirm_password: str = Form(...),
|
87 |
db: Session = Depends(get_db)
|
88 |
):
|
|
|
|
|
|
|
|
|
|
|
89 |
user = UserCreate(username=username, email=email, password=password, confirm_password=confirm_password)
|
90 |
registered_user = register(user, db)
|
91 |
return RedirectResponse("/registration_successful")
|
|
|
92 |
|
93 |
@app.post("/registration_successful", response_class=HTMLResponse)
|
94 |
async def registration_successful(request: Request):
|
|
|
3 |
from fastapi import FastAPI, Form, Depends, HTTPException
|
4 |
from fastapi.requests import Request
|
5 |
from fastapi.responses import HTMLResponse, RedirectResponse
|
6 |
+
from fastapi.security import OAuth2PasswordRequestForm
|
7 |
from fastapi.templating import Jinja2Templates
|
8 |
from sqlalchemy.orm import Session
|
9 |
from auth import verify_token, oauth2_scheme, auth_views, register, UserCreate, authenticate_user, get_user_by_verification_token
|
|
|
44 |
@app.post("/login", response_class=HTMLResponse)
|
45 |
async def login_post(
|
46 |
request: Request,
|
47 |
+
form_data: OAuth2PasswordRequestForm = Depends(),
|
|
|
48 |
db: Session = Depends(get_db)
|
49 |
):
|
50 |
+
email = form_data.username
|
51 |
+
password = form_data.password
|
52 |
+
|
53 |
# Validate the email and password
|
54 |
if not email or not password:
|
55 |
raise HTTPException(status_code=400, detail="Invalid email or password")
|
56 |
|
57 |
+
# Check user authentication using the provided email and password
|
58 |
user = authenticate_user(db, email, password)
|
59 |
+
|
60 |
if user is not None:
|
61 |
# Authentication succeeded
|
62 |
# Create an access token and handle login success
|
|
|
63 |
access_token = auth_views.create_access_token(
|
64 |
data={"sub": user.email},
|
65 |
expires_delta=timedelta(minutes=auth_views.ACCESS_TOKEN_EXPIRE_MINUTES),
|
66 |
)
|
67 |
+
|
68 |
+
# Set the access_token (if desired)
|
69 |
user.token = access_token
|
70 |
+
|
71 |
+
# Commit the changes to the database
|
72 |
db.commit()
|
73 |
+
|
74 |
+
# Handle the login success as needed
|
75 |
+
return templates.TemplateResponse("protected.html", {"request": request, "user": user.username})
|
76 |
else:
|
77 |
# Authentication failed
|
78 |
# Handle login failure, e.g., display an error message
|
79 |
+
return templates.TemplateResponse("login.html", {"request": request, "error_message": "Invalid email or password"})
|
|
|
80 |
|
81 |
@app.get("/register", response_class=HTMLResponse)
|
82 |
async def register_get(request: Request):
|
83 |
return templates.TemplateResponse("register.html", {"request": request})
|
84 |
|
85 |
+
|
86 |
@app.post("/register", response_class=HTMLResponse)
|
87 |
async def register_post(
|
88 |
request: Request,
|
89 |
+
form_data: OAuth2PasswordRequestForm = Depends(),
|
|
|
|
|
|
|
90 |
db: Session = Depends(get_db)
|
91 |
):
|
92 |
+
username = form_data.username
|
93 |
+
email = form_data.email
|
94 |
+
password = form_data.password
|
95 |
+
confirm_password = form_data.password
|
96 |
+
|
97 |
user = UserCreate(username=username, email=email, password=password, confirm_password=confirm_password)
|
98 |
registered_user = register(user, db)
|
99 |
return RedirectResponse("/registration_successful")
|
100 |
+
|
101 |
|
102 |
@app.post("/registration_successful", response_class=HTMLResponse)
|
103 |
async def registration_successful(request: Request):
|