8000 updated · wpcodevo/python_fastapi@0aa1e24 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0aa1e24

Browse files
committed
updated
1 parent 52f1e05 commit 0aa1e24

File tree

5 files changed

+24
-21
lines changed

5 files changed

+24
-21
lines changed

app/models.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import uuid
12
from .database import Base
23
from sqlalchemy import TIMESTAMP, Column, ForeignKey, String, Boolean, text
34
from sqlalchemy.dialects.postgresql import UUID
@@ -6,8 +7,8 @@
67

78
class User(Base):
89
__tablename__ = 'users'
9-
id = Column(UUID, primary_key=True, nullable=False,
10-
server_default=text("uuid_generate_v4()"))
10+
id = Column(UUID(as_uuid=True), primary_key=True, nullable=False,
11+
default=uuid.uuid4)
1112
name = Column(String, nullable=False)
1213
email = Column(String, unique=True, nullable=False)
1314
password = Column(String, nullable=False)
@@ -22,9 +23,9 @@ class User(Base):
2223

2324
class Post(Base):
2425
__tablename__ = 'posts'
25-
id = Column(UUID, primary_key=True, nullable=False,
26-
server_default=text("uuid_generate_v4()"))
27-
user_id = Column(UUID, ForeignKey(
26+
id = Column(UUID(as_uuid=True), primary_key=True, nullable=False,
27+
default=uuid.uuid4)
28+
user_id = Column(UUID(as_uuid=True), ForeignKey(
2829
'users.id', ondelete='CASCADE'), nullable=False)
2930
title = Column(String, nullable=False)
3031
content = Column(String, nullable=False)

app/oauth2.py

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class Settings(BaseModel):
1616
authjwt_token_location: set = {'cookies', 'headers'}
1717
authjwt_access_cookie_key: str = 'access_token'
1818
authjwt_refresh_cookie_key: str = 'refresh_token'
19+
authjwt_cookie_csrf_protect: bool = False
1920
authjwt_public_key: str = base64.b64decode(
2021
settings.JWT_PUBLIC_KEY).decode('utf-8')
2122
authjwt_private_key: str = base64.b64decode(

app/routers/auth.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ def login(payload: schemas.LoginUserSchema, response: Response, db: Session = De
6161

6262
# Create access token
6363
access_token = Authorize.create_access_token(
64-
subject=user.id, expires_time=timedelta(minutes=ACCESS_TOKEN_EXPIRES_IN))
64+
subject=str(user.id), expires_time=timedelta(minutes=ACCESS_TOKEN_EXPIRES_IN))
6565

6666
# Create refresh token
6767
refresh_token = Authorize.create_refresh_token(
68-
subject=user.id, expires_time=timedelta(minutes=REFRESH_TOKEN_EXPIRES_IN))
68+
subject=str(user.id), expires_time=timedelta(minutes=REFRESH_TOKEN_EXPIRES_IN))
6969

7070
# Store refresh and access tokens in cookie
7171
response.set_cookie('access_token', access_token, ACCESS_TOKEN_EXPIRES_IN * 60,
@@ -82,7 +82,6 @@ def login(payload: schemas.LoginUserSchema, response: Response, db: Session = De
8282
@router.get('/refresh')
8383
def refresh_token(response: Response, request: Request, Authorize: AuthJWT = Depends(), db: Session = Depends(get_db)):
8484
try:
85-
print(Authorize._refresh_cookie_key)
8685
Authorize.jwt_refresh_token_required()
8786

8887
user_id = Authorize.get_jwt_subject()
@@ -94,7 +93,7 @@ def refresh_token(response: Response, request: Request, Authorize: AuthJWT = Dep
9493
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,
9594
detail='The user belonging to this token no logger exist')
9695
access_token = Authorize.create_access_token(
97-
subject=user_id, expires_time=timedelta(minutes=ACCESS_TOKEN_EXPIRES_IN))
96+
subject=str(user.id), expires_time=timedelta(minutes=ACCESS_TOKEN_EXPIRES_IN))
9897
except Exception as e:
9998
error = e.__class__.__name__
10099
if error == 'MissingTokenError':

app/routers/post.py

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
from typing import List
2-
from app import oauth2
1+
import uuid
32
from .. import schemas, models
43
from sqlalchemy.orm import Session
54
from fastapi import Depends, HTTPException, status, APIRouter, Response
65
from ..database import get_db
6+
from app.oauth2 import require_user
77

88
router = APIRouter()
99

1010

11-
@router.get("/")
12-
def get_posts(db: Session = Depends(get_db), limit: int = 10, page: int = 1, search: str = ''):
11+
@router.get('/')
12+
def get_posts(db: Session = Depends(get_db), limit: int = 10, page: int = 1, search: str = '', user_id: str = Depends(require_user)):
1313
skip = (page - 1) * limit
1414

1515
posts = db.query(models.Post).group_by(models.Post.id).filter(
@@ -18,16 +18,17 @@ def get_posts(db: Session = Depends(get_db), limit: int = 10, page: int = 1, sea
1818

1919

2020
@router.post('/', status_code=status.HTTP_201_CREATED, response_model=schemas.PostResponse)
21-
def create_post(post: schemas.CreatePostSchema, db: Session = Depends(get_db), user_id: str = Depends(oauth2.require_user)):
22-
new_post = models.Post(**post.dict(), user_id=user_id)
21+
def create_post(post: schemas.CreatePostSchema, db: Session = Depends(get_db), owner_id: str = Depends(require_user)):
22+
post.user_id = uuid.UUID(owner_id)
23+
new_post = models.Post(**post.dict())
2324
db.add(new_post)
2425
db.commit()
2526
db.refresh(new_post)
2627
return new_post
2728

2829

2930
@router.put('/{id}', response_model=schemas.PostResponse)
30-
def update_post(id: str, post: schemas.CreatePostSchema, db: Session = Depends(get_db), user_id: str = Depends(oauth2.require_user)):
31+
def update_post(id: str, post: schemas.CreatePostSchema, db: Session = Depends(get_db), user_id: str = Depends(require_user)):
3132
post_query = db.query(models.Post).filter(models.Post.id == id)
3233
updated_post = post_query.first()
3334

@@ -43,7 +44,7 @@ def update_post(id: str, post: schemas.CreatePostSchema, db: Session = Depends(g
4344

4445

4546
@router.get('/{id}', response_model=schemas.PostResponse)
46-
def get_post(id: str, db: Session = Depends(get_db), user_id: str = Depends(oauth2.require_user)):
47+
def get_post(id: str, db: Session = Depends(get_db), user_id: str = Depends(require_user)):
4748
post = db.query(models.Post).filter(models.Post.id == id).first()
4849
if not post:
4950
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND,
@@ -52,7 +53,7 @@ def get_post(id: str, db: Session = Depends(get_db), user_id: str = Depends(oaut
5253

5354

5455
@router.delete('/{id}')
55-
def delete_post(id: int, db: Session = Depends(get_db), user_id: str = Depends(oauth2.require_user)):
56+
def delete_post(id: str, db: Session = Depends(get_db), user_id: str = Depends(require_user)):
5657
post_query = db.query(models.Post).filter(models.Post.id == id)
5758
post = post_query.first()
5859
if not post:

app/schemas.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datetime import datetime
2+
import uuid
23
from pydantic import BaseModel, EmailStr, constr
34

45

@@ -24,7 +25,7 @@ class LoginUserSchema(BaseModel):
2425

2526

2627
class UserResponse(UserBaseSchema):
27-
id: str
28+
id: uuid.UUID
2829
created_at: datetime
2930
updated_at: datetime
3031

@@ -34,7 +35,7 @@ class PostBaseSchema(BaseModel):
3435
content: str
3536
category: str
3637
image: str
37-
user_id: str | None = None
38+
user_id: uuid.UUID | None = None
3839

3940
class Config:
4041
orm_mode = True
@@ -45,7 +46,7 @@ class CreatePostSchema(PostBaseSchema):
4546

4647

4748
class PostResponse(PostBaseSchema):
48-
id: str
49+
id: uuid.UUID
4950
user: UserResponse
5051
created_at: datetime
5152
updated_at: datetime

0 commit comments

Comments
 (0)
0