Reactjs 使用react路由器dom的受保护页面不';行不通
我正在尝试实现仅登录用户仪表板页面 App.jsReactjs 使用react路由器dom的受保护页面不';行不通,reactjs,react-router-dom,Reactjs,React Router Dom,我正在尝试实现仅登录用户仪表板页面 App.js <BrowserRouter history={hist}> <Route path="/sign-in" exact component={SignIn} /> <PrivateRoute path="/dashboard"> <Dashboard /> </PrivateRoute> </BrowserRouter> privaterout.js
<BrowserRouter history={hist}>
<Route path="/sign-in" exact component={SignIn} />
<PrivateRoute path="/dashboard">
<Dashboard />
</PrivateRoute>
</BrowserRouter>
privaterout.js
export function PrivateRoute({children, ...props}) {
return (
<Route {...props} render={( {location} ) =>
isAuthenticated ? children : <Redirect to="/sign-in" />
}
/>
);
}
const isAuthenticated = () => {
const userToken = JSON.parse(sessionStorage.getItem("user-token"));
return userToken ? true : false'
}
导出函数privaterout({children,…props}){
返回(
是否已验证?儿童:
}
/>
);
}
常量已验证=()=>{
const userToken=JSON.parse(sessionStorage.getItem(“用户令牌”);
返回userToken?真:假'
}
我正在检查sessionStorage的用户令牌,如果为null,则返回false或true。
事件虽然返回“false”,但会重定向到仪表板,而不是登录页面。
我的问题是什么?在PrivateRoute.js中这样做
<Route {...props} render={( {location} ) =>
isAuthenticated() ? children : <Redirect to="/sign-in" />
}
/>
是否已验证()?儿童:
}
/>
原因是您没有调用
isAuthenticated
。如果问题仍然存在,请随时讨论。在PrivateRoute.js中执行此操作
<Route {...props} render={( {location} ) =>
isAuthenticated() ? children : <Redirect to="/sign-in" />
}
/>
是否已验证()?儿童:
}
/>
原因是您没有调用
isAuthenticated
。如果问题仍然存在,请随时讨论。路由器重定向到仪表板(即使未经验证的用户)的原因是已验证
是一个函数。因此,您需要调用此函数:
export function PrivateRoute({children, ...props}) {
return (
<Route {...props} render={( {location} ) =>
isAuthenticated() ? children : <Redirect to="/sign-in" />
}
/>
);
}
const isAuthenticated = () => {
const userToken = JSON.parse(sessionStorage.getItem("user-token"));
return userToken ? true : false'
}
const isAuthenticated = (() => {
const userToken = JSON.parse(sessionStorage.getItem("user-token"));
return userToken ? true : false'
})()
export function PrivateRoute({children, ...props}) {
return (
<Route {...props} render={( {location} ) =>
isAuthenticated ? children : <Redirect to="/sign-in" />
}
/>
);
}
导出函数privaterout({children,…props}){
返回(
isAuthenticated()?子项:
}
/>
);
}
常量已验证=()=>{
const userToken=JSON.parse(sessionStorage.getItem(“用户令牌”);
返回userToken?真:假'
}
如果不希望在每次路由更改时调用函数,可以实现立即调用的函数:
export function PrivateRoute({children, ...props}) {
return (
<Route {...props} render={( {location} ) =>
isAuthenticated() ? children : <Redirect to="/sign-in" />
}
/>
);
}
const isAuthenticated = () => {
const userToken = JSON.parse(sessionStorage.getItem("user-token"));
return userToken ? true : false'
}
const isAuthenticated = (() => {
const userToken = JSON.parse(sessionStorage.getItem("user-token"));
return userToken ? true : false'
})()
export function PrivateRoute({children, ...props}) {
return (
<Route {...props} render={( {location} ) =>
isAuthenticated ? children : <Redirect to="/sign-in" />
}
/>
);
}
const isAuthenticated=(()=>{
const userToken=JSON.parse(sessionStorage.getItem(“用户令牌”);
返回userToken?真:假'
})()
导出函数PrivateRoute({children,…props}){
返回(
是否已验证?儿童:
}
/>
);
}
路由器重定向到仪表板(即使未经身份验证的用户)的原因是isAuthenticated
是一个函数。因此,您需要调用此函数:
export function PrivateRoute({children, ...props}) {
return (
<Route {...props} render={( {location} ) =>
isAuthenticated() ? children : <Redirect to="/sign-in" />
}
/>
);
}
const isAuthenticated = () => {
const userToken = JSON.parse(sessionStorage.getItem("user-token"));
return userToken ? true : false'
}
const isAuthenticated = (() => {
const userToken = JSON.parse(sessionStorage.getItem("user-token"));
return userToken ? true : false'
})()
export function PrivateRoute({children, ...props}) {
return (
<Route {...props} render={( {location} ) =>
isAuthenticated ? children : <Redirect to="/sign-in" />
}
/>
);
}
导出函数privaterout({children,…props}){
返回(
isAuthenticated()?子项:
}
/>
);
}
常量已验证=()=>{
const userToken=JSON.parse(sessionStorage.getItem(“用户令牌”);
返回userToken?真:假'
}
如果不希望在每次路由更改时调用函数,可以实现立即调用的函数:
export function PrivateRoute({children, ...props}) {
return (
<Route {...props} render={( {location} ) =>
isAuthenticated() ? children : <Redirect to="/sign-in" />
}
/>
);
}
const isAuthenticated = () => {
const userToken = JSON.parse(sessionStorage.getItem("user-token"));
return userToken ? true : false'
}
const isAuthenticated = (() => {
const userToken = JSON.parse(sessionStorage.getItem("user-token"));
return userToken ? true : false'
})()
export function PrivateRoute({children, ...props}) {
return (
<Route {...props} render={( {location} ) =>
isAuthenticated ? children : <Redirect to="/sign-in" />
}
/>
);
}
const isAuthenticated=(()=>{
const userToken=JSON.parse(sessionStorage.getItem(“用户令牌”);
返回userToken?真:假'
})()
导出函数PrivateRoute({children,…props}){
返回(
是否已验证?儿童:
}
/>
);
}