feat: front end for login
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+7
-3
@@ -31,10 +31,10 @@ def delete_item(db: Session, item_id: int):
|
||||
|
||||
|
||||
def authenticate_user(db: Session, username: str, password: str):
|
||||
user = get_user_by_username(db, username)
|
||||
user = get_user_by_username(db, username) or get_user_by_email(db, username)
|
||||
if not user:
|
||||
return None
|
||||
if not verify_password(password, str(user.hashed_password)):
|
||||
if not verify_password(password, user.hashed_password):
|
||||
return None
|
||||
return user
|
||||
|
||||
@@ -50,7 +50,11 @@ def get_user_by_email(db: Session, email: str):
|
||||
def create_user(db: Session, user: schemas.UserCreate):
|
||||
hashed_pw = hash_password(user.password)
|
||||
db_user = models.User(
|
||||
username=user.username, email=user.email, hashed_password=hashed_pw
|
||||
username=user.username,
|
||||
email=user.email,
|
||||
hashed_password=hashed_pw,
|
||||
permissions=user.permissions,
|
||||
subscriber=user.subscriber,
|
||||
)
|
||||
db.add(db_user)
|
||||
db.commit()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from fastapi import FastAPI, Depends, HTTPException, status
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.security import OAuth2PasswordRequestForm
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
@@ -10,6 +11,14 @@ Base.metadata.create_all(bind=engine)
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["http://localhost:3000", "https://localhost:3000"],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
|
||||
# Dependency
|
||||
def get_db():
|
||||
@@ -81,4 +90,5 @@ def register_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Account with that email already registered",
|
||||
)
|
||||
# Default Cases
|
||||
return crud.create_user(db, user)
|
||||
|
||||
@@ -24,13 +24,15 @@ class UserBase(BaseModel):
|
||||
|
||||
class UserCreate(UserBase):
|
||||
password: str
|
||||
permissions: dict = {}
|
||||
subscriber: bool = False
|
||||
|
||||
|
||||
class UserOut(UserBase):
|
||||
id: int
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# Other Schemas
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import logging
|
||||
import os
|
||||
from typing import Any, Mapping
|
||||
from passlib.context import CryptContext
|
||||
@@ -6,7 +5,8 @@ from datetime import UTC, datetime, timedelta
|
||||
from jose import JWTError, jwt
|
||||
from app.logger_config import Logger
|
||||
|
||||
pwd_context = CryptContext(schemas=["bcrypt"], deprecated="auto")
|
||||
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
|
||||
_logger = Logger().logger
|
||||
|
||||
|
||||
def hash_password(password: str) -> str:
|
||||
@@ -37,5 +37,5 @@ def decode_access_token(token: str) -> Mapping[Any, Any] | None:
|
||||
try:
|
||||
return jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
|
||||
except JWTError:
|
||||
logging.exception(msg="Failed to Decode JWT", extra={"TOKEN": token})
|
||||
_logger.exception(msg="Failed to Decode JWT", extra={"TOKEN": token})
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user