【发布时间】:2020-12-24 08:07:16
【问题描述】:
我已保护通过身份验证启用 true 或 false 以允许用户访问身份验证页面的路由。每次页面加载,它都会调用 auth token API 并检查是否有效。如果令牌无效,则重定向到登录页面。
ProtectedRoute.js
const ProtectedRoute = ({isEnabled, ...props}) => {
return (isEnabled) ? <Route {...props} /> : <Redirect to="/login"/>;
};
export default ProtectedRoute;
Routes.js
import {withRouter, Switch, Route } from "react-router-dom";
export default withRouter(({ location }) => {
const [isAuth, setIsAuth] = useState(false)
useLayoutEffect(() => {
(async() => {
if(accessToken){
let res = await ValidateLoginToken(accessToken)
if (res && res.data && res.data.status === 200){
setIsAuth(res.data.valid)
} else setIsAuth(false);
} else setIsAuth(false)
})()
},[isAuth])
return (
<Switch>
<ProtectedRoute path="/dashboard" component={Dashboard} isEnabled={isAuth} />
<Route path="/" component={Login} />
</Switch>
)
}
App.js
const history = createBrowserHistory();
function App() {
return (
<Router history={history}>
<Routes/>
</Router>
)
}
export default App;
Dashboard.js
export const Dashboard = () => {
return (
<div class="ui form-user center raised padded segment">
<a href="/section1">
<div id="section1" class="ui floated right basic red button">
Directory #1
</div>
</a>
</div>
)
}
问题
当 auth 用户浏览认证页面(仪表板)时,重定向到登录页面。原因是在 ProtectedRoute 呈现为 isAuth 等于 false 后,验证令牌 API 返回。
【问题讨论】:
标签: javascript reactjs react-hooks