Node.js 如果用户未登录,请不要试图让用户做出反应
所以,这似乎是一个非常简单的问题。我和Stackoverflow进行了研究,发现有人也有同样的问题。我找不到 我正在使用Node.js 如果用户未登录,请不要试图让用户做出反应,node.js,reactjs,express,Node.js,Reactjs,Express,所以,这似乎是一个非常简单的问题。我和Stackoverflow进行了研究,发现有人也有同样的问题。我找不到 我正在使用React,以及NodeJS后端。使用redux,我想确保在每次加载页面时都会检查用户是否登录。我正在这样做: `useEffect(() => { store.dispatch(loadUser()); }, []);` Redux中的加载用户是: export const loadUser = () => async (dispatch) =>
React
,以及NodeJS
后端。使用redux,我想确保在每次加载页面时都会检查用户是否登录。我正在这样做:
`useEffect(() => {
store.dispatch(loadUser());
}, []);`
Redux中的加载用户是:
export const loadUser = () => async (dispatch) => {
try {
const res = await axios.get('/auth/me');
dispatch({
type: USER_LOADED,
payload: res.data,
});
} catch (error) {
dispatch({
type: AUTH_ERROR,
});
}
};
因此,每次应用程序加载时,它都会将用户加载到状态
但是,当用户未登录时,我会在控制台中收到一条消息:
我知道为什么会出现错误,Nodejs中的路由是受保护的
显然,我不希望用户在部署页面时看到这一点。如何正确处理此错误?一种简单的方法是使用本地存储api。因此,当有人登录时,您应该生成某种身份验证令牌并将其保存在本地存储中:
localStorage.setItem("token",TOKEN_VALUE)
然后在您的react应用程序中,检查此值是否存在或未使用:
localStorage.getItem("token")
如果存在,则用户仍在登录,否则不存在
这也将实现出色的用户体验,因为他们不需要每次登录,也不会注销,除非他们愿意。一个简单的方法是使用本地存储api。因此,当有人登录时,您应该生成某种身份验证令牌并将其保存在本地存储中:
localStorage.setItem("token",TOKEN_VALUE)
然后在您的react应用程序中,检查此值是否存在或未使用:
localStorage.getItem("token")
如果存在,则用户仍在登录,否则不存在
这也将实现出色的用户体验,因为他们不需要每次登录,除非他们愿意,否则不会注销。有两种可能的情况需要考虑:
302 Found
)重定向到登录路径(这将让您的react应用程序呈现登录表单,而不是他请求的原始页面),在该路径中,不会发出需要验证的api请求
401 Unauthorized
。您的react应用程序应捕获该信息并呈现登录表单
401
失败时重新定向/呈现您的登录表单
有两种可能的情况需要考虑:
302 Found
)重定向到登录路径(这将让您的react应用程序呈现登录表单,而不是他请求的原始页面),在该路径中,不会发出需要验证的api请求
401 Unauthorized
。您的react应用程序应捕获该信息并呈现登录表单
401
失败时重新定向/呈现您的登录表单
用户在哪里看到错误?理解。我建议您在应用程序的顶部放置一个名为check auth的函数,并将其保留在此redux上。如果用户未登录,则无法运行loadUser等功能。由于这个错误消息来自浏览器,我想没有办法阻止它。绝对。您甚至可以在开始时将加载状态保持在某个状态,并在检查后将其拉回到完成状态。同时,您可以显示加载微调器。如果用户请求受保护的路由而未登录到后端,则可以重定向到登录路由。那么在您的登录组件中,不要执行此提取。@ShaunStone为什么这是一个问题?您的后端将有两条路由。一个是受保护的,为你的应用服务;另一个是不受保护的登录路径,也为你的应用服务。不同之处在于,如果用户未经身份验证,第一个路由将重定向到登录路由。当然,如果路径是登录路径,那么应用程序应该呈现登录表单。用户在哪里看到错误?理解。我建议您在应用程序的顶部放置一个名为check auth的函数,并将其保留在此redux上。如果用户未登录,则无法运行loadUser等功能。由于这个错误消息来自浏览器,我想没有办法阻止它。绝对。您甚至可以在开始时将加载状态保持在某个状态,并在检查后将其拉回到完成状态。与此同时,你可以