jwt.verify(token, process.env.JWT_Confirm_KEY).属性'id'在类型 'object' 上不存在



这是我的代码

const data = jwt.verify(token, process.env.JWT_Confirm_KEY);

,当我使用数据。如果我得到错误

await db.ref(`/users/${data.id}`).once("value")

属性'id'在类型'object'上不存在。ts(2339)

一种消除错误

的方法
interface IdEmail {
id: string;
email: string;
}
const data = jwt.verify(token, process.env.JWT_Confirm_KEY) as IdEmail;

还有哪些方法可以消除这个错误?

验证后,必须解码令牌。试试这个:

const { id, email } = jwt.decode(token, { json: true }) as IdEmail;

你可以创建一个自定义的泛型函数,它看起来和你的注释一样,但我认为这种方式会更好。

const verify = <T extends object>(token: string, secret: string): T => {
return jwt.verify(token, secret) as T;
};
const sign = <T extends object>(payload: T, secret: string): string => {
return jwt.sign(payload, secret);
};
export default const MyJwt = {
sign,
verify,
}

使用

import MyJwt from './MyJwt';
const data = MyJwt.verify<IdEmail>(token, process.env.JWT_Confirm_KEY);
// data now is a IdEmail

这可能是Typescript的另一种最小方法。注意,您还可以使用jwt.verify回调中已经解码的数据。对于程序控制流程,我更喜欢这样做。

let isJWTValid = false;
jwt.verify(token, "mysecret", (error, data) => {
if (error) {
return;
}
isJWTValid = true;
});
if (!isJWTValid) {
return "invalid token";
}
const decodedToken = jwt.decode(token) as { myValue: string }; // <--- Cast here for Typescript
const { myValue } = decodedToken;
console.log("myValue", myValue);

最新更新