Маршрутизатор React Private Route всегда перенаправляет на первый маршрут - PullRequest
0 голосов
/ 06 октября 2019

На самом деле у меня не было проблем с перенаправлением на другой маршрут нажатием кнопки, но почему-то я не могу выполнить перенаправление вручную, изменив URL. Каждый раз, когда я собирался изменить URL-адрес (например, localhost: 3000 / предложение), он всегда направляет меня к первому Route. Вот маршрут по порядку:

<Switch>
                  <Route exact path="/" component={Landing} /> // => always goin here
                  <Route exact path="/login" component={Login} />
                  <Route exact path="/register" component={Register} />

                  {/* Dashboard */}
                  <PrivateRoute
                    exact
                    path="/home"
                    component={Home}
                    StickyNav={StickyNavbar}
                  />
                  <PrivateRoute
                    exact
                    path="/proposal"
                    component={Proposal}
                    StickyNav={StickyNavbar}
                  />
                  <PrivateRoute
                    exact
                    path="/laporan"
                    component={Laporan}
                    StickyNav={StickyNavbar}
                  />

                  <Route component={NotFound} />
                </Switch>

Это не приведет меня к Landing, если я изменю URL на не приватный маршрут. Вот мой личный код маршрута:

import React from "react"
import { Route, Redirect } from "react-router-dom"
import { connect } from "react-redux"
import PropTypes from "prop-types"

const mapStateToProps = state => ({
  auth: state.auth
})

const PrivateRoute = ({ component: Component, auth, ...rest }) => (
  <Route
    {...rest}
    render={props =>
      auth.isAuthenticated === true ? (
        <Component {...props} {...rest} />
      ) : (
        <Redirect to="/login" />
      )
    }
  />
)

PrivateRoute.propTypes = {
  auth: PropTypes.object.isRequired
}

export default connect(mapStateToProps)(PrivateRoute)

1 Ответ

1 голос
/ 06 октября 2019

Исходя из сказанного @zhuber, объект auth из реагирования-редукса не вызывает до вызова частного маршрута. Поэтому я изменил условие с isAuthenticated, используя localStorage следующим образом:

      !isEmpty(localStorage.jwtToken) ? (
        <Component {...props} {...rest} />
      ) : (
        <Redirect to="/login" />
      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...