#reactjs #authentication #ssl #axios #fastapi
Вопрос:
Я работаю над приложением react, в котором мне приходится использовать множество запросов GET и POST. интерфейс использует axios в качестве http-клиента, в то время как API-интерфейсы построены с помощью FASTAPI. в настоящее время я использую только базовую аутентификацию (для которой требуется имя пользователя и пароль). API имеет размещенный пользовательский интерфейс, т. е. https://81.000.000.11. Источник также был разрешен серверной частью. т. е.
origins = [
"http://localhost:3000",
"http://127.0.0.1:3000",
"https://headacheapp.testenv.com",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
# allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
Проблема я столкнулся это: запросы из приложения работает только тогда, когда я войти в API пользовательского интерфейса. т. е. https://81.000.000.11/login (может, он хранит имя пользователя и пароль ИДК где-то в моем браузере скрытых систем хранения, так что, когда я очищаю историю браузера, а также запросы снова не работает из приложения.)
стр. сек. ОН ОТЛИЧНО РАБОТАЕТ ЧЕРЕЗ ПОЧТАЛЬОНА BASIC АВТОРИЗАЦИИ.
вот как выглядит мой ЗАПРОС на ПОЛУЧЕНИЕ
await axios({
url: `${apiUrl}/transactions/users/${state.user_id}`,
method: 'get',
crossDomain: true,
headers: {
"Authorization": "Basic averylongwierdencryptedtokensharedbybackendteam==",
'accept' : 'application/json',
'content-type': 'application/x-www-form-urlencoded'
},
auth: { username: credentials.username, password: credentials.password },
}).then((response) => {
setAllTransactions(response.data);
walletBalance(response);
setIsLoading(false);
}).catch((error) => {
console.error(error)
});
}
вот как выглядит мой ЗАПРОС на ПУБЛИКАЦИЮ
await axios({
method: "post",
url: `${apiUrl}/transactions`,
headers: {
Authorization:
"Basic averylongwierdencryptedtokensharedbybackendteam=",
'accept' : 'application/json',
'content-type': 'application/x-www-form-urlencoded'
},
auth: {
username: credentials.username,
password: credentials.password,
},
data: {
user_id: state.user_id,
transaction_id: "",
buy_sell: "buy",
batch_date: "",
acknowledge_date: "",
price: finalPrice.amount,
status: "pending",
},
}).then(function (response) {
alert(response.data.detail);
setAlert(false);
});
} catch (err) {
console.error(err);
}
Резюме: запросы будут работать только из браузеров, в которых я вошел в пользовательский интерфейс FASTAPI, он будет показывать ошибки примерно так.
Я перепробовал все, что мог, но теперь я здесь, чтобы получить помощь от экспертов. Заранее спасибо за вашу помощь.
Ответ №1:
Ошибка, которую вы получаете, исходит от браузера, и она говорит вам, что вы предоставляете ненадежный сертификат с сервера FastAPI.
Проблема в том, что вы используете HTTPS, но сертификат, с помощью которого вы настроили FastAPI, не является надежным для вашего браузера. Вам понадобится один из:
- Запуск в небезопасном режиме при разработке (HTTP вместо HTTPS).
- Купите сертификат у доверенного центра сертификации для вашего производственного домена («headacheapp.testenv.com»), и настройте DNS-сервер разработки, чтобы он указывал на ваш локальный хост.
- Добавьте центр сертификации, с которым вы подписали сертификат FastAPI, в цепочку доверия вашего браузера. Не делайте этого, если вы действительно не знаете, что делаете.