Вы можете легко справиться с ошибкой аутентификации с помощью Formik
без перенаправления. Ниже приведен пример.
handleSubmit(
{email, password}: LoginFormValues,
{props, setSubmitting, setFieldError}
){
fetch(backendURL, {
method: "POST",
body: JSON.stringify({username: email, password: password}),
headers: {
'Content-Type': 'application/json'
},
})
.then(response => response.json())
.then(data => {
if(data.token) {
localStorage.setItem("token", data.token)
props.history.push("/")
}else{
setFieldError("authentication", "Authentication Failed!");
setSubmitting(false);
}
});
}
После этого сообщение об ошибке будет доступно в errors.authentication
. Вы можете заменить authentication
любым именем, потому что error - это объект. Теперь вы можете отобразить свое сообщение об ошибке таким образом.
{errors.authentication && <div>{errors.authentication}</div>}
Вы также можете использовать setErrors
вместо setFieldError
, но это заменит весь объект ошибки новым объектом.
Что касается вашего второго вопроса, вам не нужно беспокоиться об этом, если вы гарантируете, что в форме не будет раскрыта секретная или личная информация. Вы также, вероятно, можете установить логический флаг в своем приложении, чтобы пользователь не видел форму, если пользователь вошел в систему путем перенаправления на другую страницу, но это полностью зависит от вас.