gpt4 book ai didi

javascript - 当 JWT 过期时注销用户

转载 作者:行者123 更新时间:2023-12-04 08:09:54 27 4
gpt4 key购买 nike

成功登录后,我将 JWT 存储在 context/localStorage 中。我有这样的身份验证上下文设置。如何使用 token 详细信息 iatexp用户过期后注销?
刷新限制也硬设置为 1。

export const UserContext = createContext();

export function AdminPrivateRoute({ component: Component, ...rest }) {
const { userInfo } = useContext(UserContext);
const { token } = useContext(TokenContext);

/* Token details
exp: "",
iat: "",
jti: "",
refreshCount: "",
refreshLimit: "",
sub: "",
*/

console.log("userInfo in AdminPrivate", userInfo);
return (
<Route
{...rest}
render={(props) =>
userInfo.isLoggedIn ? (
<Component {...props} />
) : (
<Redirect
to={{
pathname: "/login",
state: { from: props.location },
}}
/>
)
}
/>
);
}

export function UserProvider({ children }) {
const history = useHistory();
const [userInfo, setUserInfo] = useLocalStorage("user", {
isLoggedIn: false,
type: "",
id: "",
attributes: {
fullName: "",
token: "",
},
});

const value = useMemo(() => ({
userInfo, setUserInfo, logout: user => {
setUserInfo({
isLoggedIn: false,
type: "",
id: "",
attributes: {
fullName: "",
token: "",
},
})
history.push("/login");
}
}), [userInfo])

return <UserContext.Provider value={value}>{children}</UserContext.Provider>;
}
基本路由设置
<Router>
<ResourcesProvider>
<UserProvider>
<TokenProvider>
<Switch>
<Redirect exact path="/" to="/login" />
<Route path="/login" component={LoginForm} />
<AdminPrivateRoute path="/dashboard" component={Dashboard} />
</Switch>
</TokenProvider>
</UserProvider>
</ResourcesProvider>
</Router>

最佳答案

就像勇敢大师所说的那样,您通常不需要仅在 token 到期时解码 token 。
token 在过期或被身份验证提供程序失效时可能会变得无效。
通常,您的服务器应用程序应验证每个请求的 token 。如果它无效,它应该向客户端发送一个 http 403 状态。
您可以在客户端上处理的 403 状态:
您可以使用刷新 token 请求新的身份验证 token ,也可以将用户重定向到登录页面或注销用户。

关于javascript - 当 JWT 过期时注销用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66032768/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com