Javascript 响应受保护的路由问题而不在登录页面上注销重定向
我正在使用react-protected route jwt Authnetization构建react-login应用程序我的登录组件工作正常,但当我转到仪表板并手动更新url时,它的重定向我登录页面没有注销Javascript 响应受保护的路由问题而不在登录页面上注销重定向,javascript,reactjs,react-redux,react-router-v4,react-router-dom,Javascript,Reactjs,React Redux,React Router V4,React Router Dom,我正在使用react-protected route jwt Authnetization构建react-login应用程序我的登录组件工作正常,但当我转到仪表板并手动更新url时,它的重定向我登录页面没有注销 const PrivateRoute = ({ component: Component, ...rest }) => { //const auth = useSelector(state => state.auth) let auth =
const PrivateRoute = ({ component: Component, ...rest }) => {
//const auth = useSelector(state => state.auth)
let auth = localStorage.getItem('token')
const [isAuthenticated, setIsAuthenticated] = useState(null)
useEffect(() => {
let token = localStorage.getItem('token')
if(token){
let tokenExpiration = jwtDecode(token).exp;
let dateNow = new Date();
console.log(tokenExpiration)
if(tokenExpiration < dateNow.getTime()/1000){
setIsAuthenticated(false)
}else{
setIsAuthenticated(true)
}
} else {
setIsAuthenticated(false)
}
// eslint-disable-next-line }, [auth])
if(isAuthenticated === null){
return <></> }
return (
<Route {...rest} render={props =>
!isAuthenticated ? (
<Redirect to='/login'/>
) : (
)
}
/> ); };
const PrivateRoute=({component:component,…rest})=>{
//const auth=useSelector(state=>state.auth)
让auth=localStorage.getItem('token')
常量[isAuthenticated,setIsAuthenticated]=useState(null)
useffect(()=>{
让token=localStorage.getItem('token')
如果(令牌){
让tokenExpiration=jwtDecode(token).exp;
设dateNow=新日期();
日志(令牌过期)
if(tokenExpiration ); };
请尝试以下代码。您可以使用专用路由单独文件
privaterout.js
从“React”导入React;
从“react router dom”导入{Route,Redirect};
导出常量PrivateRoute=({component:component,…rest})=>{
返回(
(
localStorage.getItem('token')
?
:
)} />
)
}
Route.js
import React,{Component}来自'React';
从“react router dom”导入{Route,Switch};
从“./components/Login/Login”导入登录名
从“/PrivateRoute”导入{PrivateRoute}”;
从“/components/Home/Dashboard”导入仪表板;
从“/Notfound”导入Notfound;
类路由扩展组件{
render(){
返回(
)
}
}
导出默认路径;
当我尝试重新渲染时,您的答案看起来合乎逻辑。React限制渲染数量以防止无限循环。thanx对于您有价值的回答,我如何摆脱这种情况..请帮助我使用专用路径是分开的。我更新了我的最新代码
import React from 'react';
import { Route, Redirect } from 'react-router-dom';
export const PrivateRoute = ({ component: Component, ...rest }) => {
return (
<React.Fragment>
<Route {...rest} render={props => (
localStorage.getItem('token')
? <Component {...props} />
: <Redirect to={{ pathname: '/login'}} />
)} />
</React.Fragment>
)
}
import React, { Component } from 'react';
import {Route, Switch} from 'react-router-dom';
import Login from './components/Login/Login'
import { PrivateRoute } from "./PrivateRoute";
import Dashboard from "./components/Home/Dashboard";
import Notfound from './Notfound';
class Routes extends Component {
render() {
return (
<React.Fragment>
<Switch>
<PrivateRoute exact path="/" component={Dashboard} label="Home"/>
<Route path="/login" component={Login} />
<Route path="*" component={Notfound} />
</Switch>
</React.Fragment>
)
}
}
export default Routes;