Аутентификация в ядре Asp.net и React - машинопись - PullRequest
0 голосов
/ 18 ноября 2018

Я очень новичок в этой технологии, поскольку я работаю с угловым и MVC-фоном. Мне нужно сделать что-то вроде: несколько страниц моего сайта доступны только после входа в систему.

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

Я много искал в Google и сталкивался с множеством разных способов. Но я запутался, что лучше с точки зрения безопасности, так как мой сеанс будет сложным объектом?

Я попробовал одну вещь, я зарегистрировал UseSession в файле запуска и добавил значение в сеанс после входа в систему.

Я создал один компонент для вызова API и проверки значения сеанса, а если нет, то этот компонент отображает страницу входа.

    export class App extends React.Component<{}, {}> {
        constructor(props) {
            super(props);
        }

        public render() {
            return (
                <div >
                    <Route exact path="/login" component={Login} />

                    <Route component={PrivateRoute}>
                        <Route path="/" component={Home}/>
                        <Route path="/dashboard" component={Dashboard}/>
                   </Route>



                </div>
            );
        }
    }


export class PrivateRoute extends React.Component<RouteComponentProps<{}>, {}> {

    constructor(props) {
        super(props);



        this.check = this.check.bind(this);

    }

    private check(): boolean {

        if (this.props.location.pathname != '/login') {
            fetch('api/Home/GetToken', {
                method: 'GET'

            }).then((response) => response.json())
                .then((responseJson) => {
                    console.log(responseJson);

                    if (responseJson.statusCode != 200) {
                        this.props.history.replace("/login");
                        return false;
                    }
                    else {
                        return true;
                    }

                }).catch((response) => { this.props.history.replace("/login"); return false; });
            return true;
        }
        else {
            this.props.history.replace("/login");
            return false;
        }
    }

    public render() {
        if (this.props.location.pathname != '/login' && this.check())
            return this.props.children;
        else {
            this.props.history.replace("/login");
            return null;
        }

    }

}

Но это не работает. Кто-нибудь может мне помочь ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...