当前位置: 首页 > 知识库问答 >
问题:

响应路由器v4与redux保护路由和授权

郗唯
2023-03-14

我正在使用react路由器v4和redux,如果用户未登录,我想使用私有和受保护的路由重定向。

我有一个路由组件:

class Routes extends Component {

render() {
    const { auth } = this.props;
    // so checks against isAuthenticated can pass
    if (auth.isAuthenticated !== undefined) {
        return (
            <div>
                <Route exact component={() => <Home />} />
                <PublicRoute
                    authed={() => auth.isAuthenticated}
                    path="/login"
                    component={(routerProps) => <Login {...routerProps} />}
                />
                <PublicRoute
                    authed={() => auth.isAuthenticated}
                    path="/register"
                    component={(routerProps) => <Register {...routerProps} />}
                />
                <PrivateRoute
                    authed={() => auth.isAuthenticated}
                    path="/dashboard"
                    component={Dashboard}
                />
            </div>
        );
    } else {
        return <div></div>
    }
  }
}

function mapStateToProps(state) {
  return {
    auth: state.auth
  }
}

export default withRouter(connect(mapStateToProps)(Routes));

它是这样实现的:

class Main extends Component {

constructor(props) {
    super(props);
}

componentDidMount() {
    store.dispatch(checkAuth());
}

render() {
    return (
        <Provider store={store}>
            <Router>
                <Theme>
                    <Routes />
                </Theme>
            </Router>
        </Provider>
    );
  }
}

这是私人路线:

export function PrivateRoute({ component: Component, authed, ...rest }) {
const isAuthenticated = authed();
return (
    <Route
        {...rest}
        render={props =>
            isAuthenticated === true ? (
                <Component {...props} />
            ) : (
                <Redirect
                    to={{
                        pathname: "/login",
                        state: { from: props.location }
                    }}
                />
            )
        }
    />
  );
}

传递authprop的最佳方式是什么,如果我连接Routes组件并从那里传递auth是否可以,或者应该从其他地方传递,或者连接需要它的每个组件并从那里读取?此外,这种方法如何处理嵌套路由,如/dashboard/settings?谢谢

共有1个答案

逄俊力
2023-03-14

实际上,在响应中使用这种私有路由是可以的,但是您应该检查两个时刻:

>

  • 我应该检查一下,你没有确切的属性,所以你的所有路由,如/dashboard/panel1/dashboard/panel2将是私有的

    auth.isAuthenticated}path=“/dashboard”组件={dashboard}/

    “连接”会出现一些问题。有一个简单的解决方案

    导出默认连接(mapStateToProps, null, null,{纯:假,})(私人路由);

    此处的更多信息:反应路由器专用路由/重定向不工作

  •  类似资料:
    • 问题内容: 在安装组件之前进行授权检查的最佳实践是什么? 我使用react-router 1.x 这是我的路线 这是我的仪表板组件: 问题答案: 更新了 React Router v4的* 解决方案 * 反应路由器到v3 使用’onEnter’事件并在回调中检查用户是否被授权:

    • 我在想这样的事情: 前台有一个不同的布局和风格与管理区域。所以在frontpage中的路由是home、about等等,其中一个应该是子路由。 /home应该呈现到Frontpage组件中,而/admin/home应该呈现在后端组件中。 最终解决方案: 这是我现在使用的最终解决方案。这个例子也像传统的404页面一样有一个全局错误组件。

    • 问题内容: 尝试执行以下操作,但不起作用。 正如文档所述,Switch元素内仅允许Route和Redirect元素。如何在不显式地将HomePage和UserPage包裹在App中或没有将错误页面包裹在App中的情况下使其工作? 问题答案: 当我开始开发“通用React应用”时,第一页的加载是通过服务器端渲染完成的,但是我也遇到了类似的问题,因为React- Router刚刚更新到4.0。您应该考

    • 我在最新的应用程序中使用react router和redux,我面临着一些与基于当前url参数和查询所需状态更改相关的问题。 基本上,我有一个组件,需要在每次url更改时更新它的状态。状态是通过redux的道具传递给decorator的,就像这样 目前,我正在使用componentWillReceiveProps生命周期方法来响应来自react-router的url更改,因为当this.props

    • 使用redux和反应路由器,我想访问路由指定的组件以外的组件上的路由参数。 我已经对react-router、redux和react-router-redux进行了如下设置,我想从我的redux存储访问reportId参数。 我已经尝试连接react-redux路由器来存储路由状态,但是我发现除了活动路由的完整路径之外,redux内部没有任何有用的存储。这让我可以选择从redux中的路径解析出re