Пользовательский интерфейс Onsen реализует вход через React

При переносе нашего приложения Onsen v1 (на основе AngularJS1) в Onsen v2 с помощью React я столкнулся с небольшой проблемой: реализация логики в отношении аутентификации пользователя (перенаправление на экран входа в систему, если нет "сохраненных учетных данных")

Вот как структурировано мое приложение...

Точкой входа является файл App.js, который выглядит следующим образом:

import React from 'react';

import {Navigator} from 'react-onsenui';

import Home from './Home';
import Login from './Login';

class App extends React.Component {

    renderPage(route, navigator) {
        route.props = route.props || {};
        route.props.key = route.comp.displayName;
        route.props.navigator = navigator;
        return React.createElement(route.comp, route.props);
    }

    render() {
        return (
            <Navigator
                initialRoute={{comp: Home}}
                renderPage={this.renderPage}
            />
        );
    }
}

export default App;

Вы можете видеть, что у меня есть ссылки на оба компонента: "Домой" и "Вход", однако я хочу решить, какой компонент визуализировать.

Я попробовал следующее: используйте "Home" в качестве initialRoute и решите в конструкторе компонентов Home, если нам нужно перейти на страницу входа.

constructor(props) {
    super(props);
    this.state = {
        isOpen: false
    };
    const authenticated = GetAuthenticated();
    if(!authenticated) {
       this.props.navigator.pushPage({comp: Login});
    }
}

Это просто не сработало, страница входа никогда не отображалась.

В общем, я хотел бы посмотреть в localStorage учетные данные пользователя (или любое другое место для хранения такого рода информации), и на основании этого решить, загружать ли "домашнюю" страницу или "логин". стр.

1 ответ

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

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

НЕ, и я не могу этого подчеркнуть, сохраните учетные данные пользователя в localStorage Когда-либо. Никогда

Другие вопросы по тегам