Reactjs 使用带有私有路由的上下文API响应登录
在我的react web应用程序中,使用上下文API和挂钩实现登录注销功能。除了我必须点击“登录”按钮两次才能将用户推到仪表板之外,一切似乎都很正常Reactjs 使用带有私有路由的上下文API响应登录,reactjs,authentication,react-hooks,Reactjs,Authentication,React Hooks,在我的react web应用程序中,使用上下文API和挂钩实现登录注销功能。除了我必须点击“登录”按钮两次才能将用户推到仪表板之外,一切似乎都很正常 语句,return好吧,它归结为一个简单的事实,即当您进行检查时,您的上下文没有更新。最简单的解决方案是删除对isLoggedIn的检查,并将用户推到仪表板: const postLogin = async (e) => { e.preventDefault() try { await login()
语句,
return好吧,它归结为一个简单的事实,即当您进行检查时,您的上下文没有更新。最简单的解决方案是删除对isLoggedIn
的检查,并将用户推到仪表板:
const postLogin = async (e) => {
e.preventDefault()
try {
await login()
props.history.push('/dashboard')
} catch (error) {
dispatch({
type: 'LOGIN_FAILURE',
payload: 'Unable to login'
})
}
}
然后,当您没有返回200时,在您的登录
函数中抛出一个错误:
由于您的登录代码位于try catch(重试捕获)块中,当登录失败时,用户不会被推到仪表板上。好的,当您使用localStorage(本地存储)
时,您可以在发生重新加载时保留数据,这在使用上下文Api时是不可能的。@Gh05d好的。关于我的登录问题有什么帮助吗?
const login = async () => {
const loginUser = { status: 200, id: '3654634565659abhdgh' }
if (loginUser.status === 200) {
dispatch({
type: 'LOGIN_SUCCESS',
payload: loginUser.id
})
} else {
throw new Error("Invalid Credentials")
}
}