Refresh token, spolecne lety s copilotem, lazy typ

This commit is contained in:
Michal Kváček
2023-07-29 23:27:24 +02:00
parent 77dd5538d3
commit fcd80f20e8
11 changed files with 133 additions and 38 deletions
+12 -16
View File
@@ -1,6 +1,6 @@
from datetime import timedelta
from fastapi import FastAPI, APIRouter, Depends, Security, HTTPException
from fastapi_jwt import JwtAuthorizationCredentials, JwtAccessBearerCookie, JwtRefreshBearerCookie
from fastapi_jwt import JwtAuthorizationCredentials, JwtRefreshBearer, JwtAccessBearerCookie, JwtRefreshBearerCookie
from sqlalchemy.ext.asyncio import AsyncSession
from starlette.middleware.cors import CORSMiddleware
from starlette.responses import RedirectResponse, Response
@@ -9,7 +9,7 @@ from strawberry.fastapi import GraphQLRouter
from config import APP_SECRET_KEY, GRAPHIQL, APP_DEBUG
from dependencies.db import db_session
from endpoints.init_data import InitDataEndpoint
from endpoints.login import LoginEndpoint, LoginInput, MeEndpoint
from endpoints.login import LoginEndpoint, LoginInput, MeEndpoint, RefreshEndpoint
from endpoints.registration import RegistrationInput, RegistrationEndpoint
from graphql_schema.schema import schema, GraphQLContext
@@ -19,7 +19,7 @@ class App:
access_security = JwtAccessBearerCookie(
secret_key=APP_SECRET_KEY,
auto_error=False,
access_expires_delta=timedelta(hours=1)
access_expires_delta=timedelta(seconds=30)
)
refresh_security = JwtRefreshBearerCookie(
secret_key=APP_SECRET_KEY,
@@ -43,7 +43,7 @@ class App:
def setup_middleware(app: FastAPI):
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_origins=["http://localhost:9001"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
@@ -89,19 +89,15 @@ class App:
db: AsyncSession = Depends(db_session),
credentials: JwtAuthorizationCredentials = Security(self.access_security)
):
return await MeEndpoint(db, credentials).on_get()
return await MeEndpoint(db).on_get(credentials)
@app.post("/refresh")
async def refresh(
resp: Response,
credentials: JwtAuthorizationCredentials = Security(self.refresh_security)
):
return await RefreshEndpoint(self.access_security, self.refresh_security).on_post(resp, credentials)
# @app.post("/refresh")
# def refresh(
# credentials: JwtAuthorizationCredentials = Security(refresh_security)
# ):
# # Update access/refresh tokens pair
# # We can customize expires_delta when creating
# access_token = access_security.create_access_token(subject=credentials.subject)
# refresh_token = refresh_security.create_refresh_token(subject=credentials.subject,
# expires_delta=timedelta(days=2))
#
# return {"access_token": access_token, "refresh_token": refresh_token}
self.setup_graphql_endpoint(app)