-2

Делаю проект на 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)
задан 26 февр. 2025 в 14:03

1 ответ 1

0
Add line (only debug)
config.JWT_COOKIE_CSRF_PROTECT = False

Docs https://flask-jwt-extended.readthedocs.io/en/stable/options.html#jwt-access-cookie-name

ответ дан 4 мар. 2025 в 14:00

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.