Когда пользователь входит в систему, я создаю вход с помощью pyjwt и устанавливаю файл cookie Httponly, но не могу установить файл cookie из-за CROS.
Когда пользователь входит в систему, я создаю вход с помощью pyjwt и установка файлов cookie httponly следующим образом.
def create_jwt(user_id: str, ip_address: str=None):
payload = {
"sub": str(user_id),
"ip": ip_address,
"iat": datetime.now(),
"exp": datetime.now() + timedelta(minutes=30)
}
return jwt.encode(payload, PRIVATE_KEY, algorithm="RS256)
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017/")
database = self.client["test"]
@login_router.post("/login", response_model=SuccessResponse, tags=("Login",))
async def login(request: LoginRequest, response: Response):
try:
username = request.username
password = request.password
user = database.find_one(
"user",
filter={"username": username},
)
if not user or not login_instance.verify_password(
password, user.get("password"), user.get("salt")
):
raise InvalidUser()
from ..authentication import create_jwt
response.set_cookie(
key="access_token",
value=create_jwt(username),
httponly=True,
samesite="None",
secure=False,
path="/",
)
response_content = {
"status": status.HTTP_200_OK,
"success": True,
"message": "User Logged In successfully",
"data": {},
}
return response_content
except InvalidUser:
raise InvalidUser()
except Exception as e:
raise InternalServerError(e)
Когда я нажимаю на этот API во внешнем интерфейсе (мой интерфейс написан на VueJS), он говорит, что невозможно установить файл cookie.
Изображение ошибки
Я добавил CROS в FastAPI main.py
main.py
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["http://localhost:8081"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
Мой внешний интерфейс работает на порту **8081.
Внешний интерфейс**
api.js
import axios from 'axios';
const apiURL = process.env.VUE_APP_BASE_URL;
const apiClient = axios.create({
baseURL: apiURL,
headers: {
'Content-Type': 'application/json',
},
withCredentials: true,
});
export const get = (endpoint, params = {}) => {
return apiClient.get(endpoint, { params });
};
export const post = (endpoint, payload) => {
return apiClient.post(endpoint, payload);
};
Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-fastapi