LocalStorage для React Экран входа в систему с reCaptcha
Привет всем, я пытаюсь использовать localStorage, когда пользователь пытается войти в мой веб-сайт, если он / она пытается более 2 раз, ReCaptcha появляется только так, это установить флажок в reCaptcha, но если пользователь обновил страницу, reCaptcha пропал из-за моего состояния попытки Number. Я хочу сохранить попытку Number в localStorage и использовать в первую очередь localStorage, если пользователь пытается более 2, при обновлении страницы reCaptche должен быть там.
Я пытался так, но это не работает. Если вы мне поможете, я буду очень признателен за это. Всем спасибо.
this.state = {
email: '',
password: '',
load: false,
attempCount: 0,
};
handleLogin(e) {
const {
email, password, recaptcha,
} = this.state;
const cachedHits = localStorage.getItem(this.state.attempCount);
if (cachedHits) {
this.setState({ attempCount: JSON.parse(cachedHits) });
return;
}
this.setState({ attempCount: this.state.attempCount + 1 });
e.preventDefault();
e.stopPropagation();
this.props.doSignIn({ email, password, recaptcha });
return false;
}
3 ответа
Хорошо, код, который вы добавили, не показывает, как и где вы устанавливаете значение в localStorage.
Я полагаю, вы будете обновлять localstorage
в событии нажатия кнопки входа в систему что-то вроде этого
localStorage.setItem('clickCount', this.state.attempCount );
при условии вашего this.state.attempCount
увеличивается на 1 при клике
Теперь, чтобы получить его значение, используйте
let count = localStorage.getItem('clickCount');
if(count > 2){
// show Captcha
}
Я думаю, вы пытаетесь получить значение под ключ 0
если вы посмотрите на документацию здесь. Попробуй сохранить его под ключ ты сейчас как localStorage.setItem('attempts', this.state.attempCount)
а потом localStorage.getItem('attempts')
,
Когда вы делаете getItem
Я верю, что это вернет string
так же разбирать parseInt(localStorage.getItem('attempts'), 10)
перед использованием его для любой операции.
Есть две проблемы с кодом:
значение никогда не будет установлено в локальном хранилище.
В первый раз, когда вызывается handleLogin, ниже строки const cachedHits = localStorage.getItem(0); он пытается извлечь значение для нуля, который никогда не сохраняется в локальном хранилище, и возвращает ноль (т. е. cachedHits= null), затем пропускает часть if, устанавливает значение элемента tryCount в 1 и отображает капчу. в следующий раз, когда вызывается handleLogin, const cachedHits = localStorage.getItem(1); который снова отсутствует в кэше и cachedHits = null и т. д. Итак, вам нужно установить значение в localStorage для некоторого ключа, например, и в getItem использовать этот ключ
Не видя ваш код doSignIn, трудно сказать, что происходит с вашим localStorage, но ваш вызов localStorage в вставленном вами коде передает ваш попытку Count в качестве ключа. Вы должны использовать строку в качестве ключа, например "tryupount", а не ключ, который будет меняться при изменении вашего состояния.
Возможно, это не вся ваша проблема, но это то, что я заметил до сих пор.