【发布时间】:2020-05-17 22:23:08
【问题描述】:
我希望为 React Router 应用程序实现真实世界的身份验证。我见过的每个教程都使用fakeAuth 来模拟身份验证,但实际上并没有实现真实世界的身份验证。我正在尝试实际实施身份验证。这可能吗?
现在我正在向后端发送jwt 以检查它是否有效,然后再返回我要渲染的Component -- 如果jwt 身份验证失败,则Redirect 到Login,或者render Dashboard 如果它是有效的jwt。问题是ProtectedRoute是returning redirect到/login之前后端是returning jwt是否有效。
如何在我的React-Router 应用程序中获得真实世界的身份验证?这甚至可能吗?
const PrivateRoute = ({ component: Component, ...rest }) => {
const [auth, setAuth] = useState(false);
useEffect(() => {}, [auth])
useEffect(() => {
// send jwt to API to see if it's valid
let token = localStorage.getItem("token");
if (token) {
fetch("/protected", {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({ token })
})
.then((res) => {
return res.json()
})
.then((json) => {
if (json.success) {
setAuth(true);
}
})
.catch((err) => {
setAuth(false);
localStorage.removeItem("token");
});
}
}, [])
return (<Route {...rest}
render={(props) => {
return auth ? <Component {...props} /> : <Redirect to="/login" />
}} />)
}
}
【问题讨论】:
标签: authentication react-router jwt