Проблема в функциональности выхода из системы в React JS

#javascript #reactjs

Вопрос:

Я пытаюсь создать приложение с полным стеком, используя React JS и Spring.

Я хочу добавить функцию входа/выхода из системы в свое приложение. Я успешно настроил функциональность входа в систему с помощью API-интерфейсов REST. Как только пользователь вошел в систему, я создаю переменную isuserlogg в хранилище сеансов и устанавливаю ее как true. Используя это, я также успешно реализовал защищенные маршруты (страница видна только при входе пользователя в систему, то есть isUserLogged === true).

Сейчас я пытаюсь реализовать функцию выхода из системы, но не могу этого сделать. Это моя функция заголовка, в которой я хочу изменить логин на выход, как только пользователь войдет в систему.

 class HeaderComponent extends Component {

    logoutCurrentUser = () => {
        window.sessionStorage.setItem("isUserLogged", false);
    };

    render() {

        if(window.sessionStorage.getItem("isUserLogged") !== "true") {
            return (
                <div>
                    <header>
                        <Navbar bg = "dark" variant = "dark">
                            <Nav className="mr-auto">
                                <div className="navbar-brand"> <a href ="/" style={{color: "inherit"}}> Billing Dashboard </a></div>
                            </Nav>
                            <Nav className = "navbar-right">
                                <Link to={'/admin-register'} className="nav-link"><FontAwesomeIcon icon = {faUserPlus}/> Register</Link>
                                <Link to={'/admin-login'} className="nav-link"><FontAwesomeIcon icon = {faSignInAlt}/> Login</Link>
                            </Nav>
                        </Navbar>
                    </header>
                </div>
            );
        } else {
            return (
                <div>
                    <header>
                        <Navbar bg = "dark" variant = "dark">
                            <Nav className="mr-auto">
                                <div className="navbar-brand"> <a href ="/" style={{color: "inherit"}}> Billing Dashboard </a></div>
                            </Nav>
                            <Nav className = "navbar-right">
                                <Link to={'/admin-login'} className="nav-link"><FontAwesomeIcon icon = {faSignOutAlt} onClick={this.logoutCurrentUser}/> Logout </Link>
                            </Nav>
                        </Navbar>
                    </header>
                </div>
            );
        }
    }
}

export default HeaderComponent;
 

Является ли это правильным способом сделать это?

Когда я комментирую функцию, появляется кнопка выхода из системы, но когда я не комментирую функцию logoutCurrentUser, меню входа в систему не меняется на выход из системы.

Я также требую, чтобы после выхода пользователя из системы ему снова были показаны параметры регистрации и входа (в заголовке).

Итак, вкратце:

-> >При входе в систему: Показать опцию выхода из системы в заголовке, при нажатии, переменная хранилища сеансов должна быть очищена, и в заголовке снова должна отображаться опция входа и регистрации.

-> >При выходе из системы: Показать опцию входа в систему в заголовке, при нажатии создается хранилище сеансов (уже сделано), а затем опция входа меняется на выход из системы (не работает)

Пожалуйста, дайте мне знать, где я ошибаюсь и что я должен сделать, чтобы исправить это.

Любая помощь будет высоко оценена, спасибо!

Комментарии:

1. Можете ли вы написать функцию, которая проверяет наличие isUserLoggedIn внутри localStorage, а затем устанавливает значение this.state.isUserLoggedIn в значение false или true в зависимости от наличия этого ключа в localStorage? Затем измените оператор if, чтобы он реагировал на основе этого.state.isUserLoggedIn вместо этого. Дайте мне знать, если это поможет вам.