- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 jsonwebtoken
来解码 token ,并且我正在尝试获取到期日期。 Typescript 抛出关于 exp
属性的错误,我不太确定如何解决它们:
import jwt from 'jsonwebtoken'
const tokenBase64 = 'ey...' /* some valid token */
const token = jwt.decode(tokenBase64)
const tokenExpirationDate = token.exp
// ^^^
// Property 'exp' does not exist on type 'string | object'. Property 'exp' does not exist on type 'string'.
我已经安装了@types/jsonwebtoken
,并寻找一个 token 类型来转换token
,但没有找到。有什么建议吗?
使用
@types/jsonwebtoken@7.2.3
jsonwebtoken@8.1.0
.tsconfig:
{
"compilerOptions": {
"allowJs": true,
"baseUrl": ".",
"jsx": "Preserve",
"moduleResolution": "Node",
"module": "ESNext",
"sourceMap": true,
"removeComments": true,
"allowSyntheticDefaultImports": true,
"target": "ESNext"
}
}
最佳答案
这就是我使用 TS 解码的方式
import jwt from 'jsonwebtoken';
export const isTokenExpired = (token: string): boolean => {
try {
const { exp } = jwt.decode(token) as {
exp: number;
};
const expirationDatetimeInSeconds = exp * 1000;
return Date.now() >= expirationDatetimeInSeconds;
} catch {
return true;
}
};
不需要,但你也可以
import 'jest';
import jwt from 'jsonwebtoken';
import { isTokenExpired } from 'path-to-isTokenExpired/isTokenExpired';
describe('isTokenExpired', () => {
it('should return true if jwt token expired', () => {
const currentTimeInSecondsMinusThirtySeconds = Math.floor(Date.now() / 1000) - 30;
const expiredToken = jwt.sign({ foo: 'bar', exp: currentTimeInSecondsMinusThirtySeconds }, 'shhhhh');
expect(isTokenExpired(expiredToken)).toEqual(true);
});
it('should return false if jwt token not expired', () => {
const currentTimeInSecondsPlusThirtySeconds = Math.floor(Date.now() / 1000) + 30;
const notExpiredToken = jwt.sign({ foo: 'bar', exp: currentTimeInSecondsPlusThirtySeconds }, 'shhhhh');
expect(isTokenExpired(notExpiredToken)).toEqual(false);
});
it('should return true if jwt token invalid', () => {
expect(isTokenExpired('invalidtoken')).toEqual(true);
});
});
关于typescript - 如何使用 typescript 获取 `jsonwebtoken` 的 token 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47508424/
我正在使用 Vue 构建我的第一个 SPA 项目。 我决定在后端使用 NodeJS,但是,使用 JsonWebToken 构建登录功能让我很头疼。 我写了一些代码来查看 JWT 的工作原理,当我试图查
我有一个用于用户身份验证的应用程序,我遇到了这个问题,我有登录的用户并将 JWT (JsonWebToken) 存储在 cookie 中。我在验证用户后存储了 cookie。接下来,我作为管理员,在该
我是 JWT 世界的新手,我想为我的 React Native 应用程序用户创建一个 authToken。 但是,我不愿意让任何人读取里面的内容(例如 userMail、firstName 或 uni
我正在开发一个全栈项目,用户可以在其中创建帐户、访问他们的个人资料、创建博客、阅读他们的博客、删除他们的博客等。为了执行所有这些任务(注册和登录除外),用户必须待验证。 我已经完成了后端,但我不明白如
我正在使用 nodejs 和 angular cli 制作一个 Web 应用程序我正在使用 JWT 来验证我的登录功能。但是当我处理它时抛出了这个错误 Error: Expected "payload
我目前正在使用 React 开发一个网站,我希望能够让用户登录。现在我的策略是在提交时将表单数据发送到服务器( express ),如果信息与我的数据库中的用户匹配,服务器会发回一个没有敏感信息(只有
我正在尝试编译一个 typescript 文件,它一直从编译器中抛出这个错误:错误 TS2339:类型“string”上不存在属性“payload”|目的'。 “string”类型上不存在属性“pay
我收到了 JWT,并想验证它的签名。它未加密,基于 64 编码并使用 HmacSha256 签名。它是用我知道的 secret 签名的。 我似乎找不到任何关于如何在不使用 https://jwt.io
所以我试图通过在 Scalatra 中使用 JWT 来保护我的 Web 应用程序。目前,我将 Scentry 与用户密码和 RememberMe 策略一起使用,我的目的是将 RememberMe 策略
我正在尝试编译一个 typescript 文件,它一直从编译器中抛出这个错误:错误 TS2339:类型“string”上不存在属性“payload”|目的'。 “string”类型上不存在属性“pay
要使 token 无效,据我所知,存储 token 及其过期日期时间到数据库的最佳方法。要验证它,您只需从数据库中选择它,如果它存在,您就知道它已失效。此外,您可以根据过期日期时间从数据库中删除每个过
我目前正在尝试构建一个基于 token 的简单登录系统。我有一个简单的登录表单,可将凭据发送到服务器。创建 token 也对我有用。 如果用户登录并手动打开用户仪表板链接,服务器将收到获取请求。那
据说当您使用 ssl 时,您可以防止中间人从服务器窃取信息到客户端,反之亦然。在我的例子中,窃取了 jsonwebtoken。我还从其他答案中了解到,ssl 使用私钥和公钥。私钥存储在服务器上,公钥提
我正在为 node.js 使用 jsonwebtoken 包: 像这样创建 token : var token = jwt.sign(user, tokenSecret, {expiresInMinu
我正在尝试使用 node.js 设置用户级身份验证,所以我去执行 npm install -g jsonwebtoken --save。但是,当我使用 require('jsonwebtoken')
我正在尝试按照 guide 中的示例将 token 设置为在一小时内过期。 : jwt.sign({ data: 'foobar' }, 'secret', { expiresIn: 60 * 6
我正在尝试使用 Json Web token (在 article 的帮助下)验证我的 nodejs api,但问题是 token 永远不会过期。 var express = require('exp
我想忽略一些针对 token 身份验证进行检查的 API URL 我想保护 post 和 put 方法,但不想保护这个 url 本地主机:3000/api/events/ router.use(fun
我正在使用 jsonwebtoken在 NodeJs API 应用程序中用于验证我的 API 应用程序中的用户。我设置的流程如下: 1) 用户通过注册 API 注册,并使用以下方式生成访问 token
什么是JWT? JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,也是目前前后端分离项目中普遍使用的认证技术. 本文介绍如何在Golang Gin Web
我是一名优秀的程序员,十分优秀!