Missing CSRF token AuthX
Делаю проект на FastAPI, авторизация на библиотеке AuthX. При отправке одного из пост запросов он выдаёт authx.exceptions.MissingTokenError: Missing CSRF token. Я не очень понял, как нормально реализовать CSRF защиту на AuthX? Покопался в официальной документации, но ничего не понял, гптшка тоже не помогла. Вот мой код: само приложение:
from fastapi import FastAPI,UploadFile, File, Request
from fastapi.middleware.cors import CORSMiddleware
from .utils import get_current_user_id
from .views import *
from typing import List, Optional
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Разрешить все домены (для разработки)
allow_methods=["*"],
allow_headers=["*"],
)
async def get_db() -> AsyncSession:
async with SessionLocal() as db:
yield db
@app.get('/')
async def example():
return {'ok':'ok'}
@app.post('/register')
async def submit_form(data: RegisterFormData, response: Response, db: Session = Depends(get_db)):
return await register_view(data, response, db)
@app.post('/login')
async def login(data: LoginFormData, response: Response, db: Session = Depends(get_db)):
return await login_view(data, response, db)
@app.get('/protected', dependencies = [Depends(security.access_token_required)])
async def secret(user_id: str = Depends(get_current_user_id)):
return {'data':user_id}
@app.post('/logout')
async def logout(response: Response):
response.delete_cookie(config.JWT_ACCESS_COOKIE_NAME)
return {"message": "Вы успешно вышли из аккаунта."}
@app.post('/createpost', dependencies = [Depends(security.access_token_required)])
async def create_post(
request: Request,
text: Optional[str] = Form(None),
images: Optional[List[UploadFile]] = File(None),
user_id: str = Depends(get_current_user_id),
):
return await create_post_view(text, images, int(user_id))
Защита и конфиг:
from authx import AuthX, AuthXConfig
import os
config = AuthXConfig()
config.JWT_ALGORITHM = "HS256"
config.JWT_SECRET_KEY = os.getenv('SECRET_KEY')
config.JWT_ACCESS_COOKIE_NAME = "auth_token"
config.JWT_TOKEN_LOCATION = ["cookies"]
security = AuthX(config=config)