我建议您尝试了解 JWT 的原理以及它们如何在服务器和客户端之间传递,以及如何在服务器端匹配一个秘密 - 这里是 doc
有效负载可以是任意用户数据 - 即:只是一个用户名或 id
基本上,您需要一个服务,该服务在成功验证时生成令牌(当用户使用正确的凭据登录时,即:usr & pwd)并创建一个带有令牌的附加标头,以用于对服务器的进一步请求。
对于jwt-express,您显然需要安装包(与 jsonwebtoken 相同),例如:
npm install jwt-express --save
然后像这样初始化它:
var jwt = require('jwt-express');
app.use(jwt.init('secret'));
来自文档:
jwt.init() 函数为 Express 返回一个中间件函数,所以
它必须在 app.use() 中调用。它会自动读入
来自 cookie 或 Authorization 标头的 JWT(由
你)并向请求对象(req)添加一个 JWT 对象。它还将
将 jwt() 方法添加到 Response 对象 (res) 以创建/存储
智威汤逊。 jwt.init() 必须在任何其他 jwt 方法之前调用。
这些是你的选择:
- cookie:(字符串)cookie的名称(默认:'jwt-express')
- cookieOptions:(对象)存储cookie时使用的选项(默认:{httpOnly: true})
- cookies: (boolean) 如果为true,将使用cookies,否则将使用授权标头(默认:true)
- refresh: (boolean) 指示是否应在每次请求时刷新和存储 JWT(默认值:true)
- reqProperty: (string) 要填充的 req 的属性(默认值:'jwt')
- revoke: (function) jwt.revoke() 会调用这个函数(默认:function(jwt) {})
- signOptions:(对象)签署 JWT 时使用的选项(默认值:{})
- stales:(数字)jwt 过时的毫秒数(默认值:900000(15 分钟))
- 验证:(功能)附加验证。必须返回一个布尔值(默认:function(jwt) {return true})
- verifyOptions:(对象)验证 JWT 时使用的选项(默认值:{})
其余的逻辑由您自己编写代码,但我的示例应该让您大致了解如何在应用程序中管理 jwt..
这是我如何通过 jsonwebtoken 实现 jwt 的示例:
// INFO: Function to create headers, add token, to be used in HTTP requests
createAuthenticationHeaders() {
this.loadToken(); // INFO: Get token so it can be attached to headers
// INFO: Headers configuration options
this.options = new RequestOptions({
headers: new Headers({
'Content-Type': 'application/json', // INFO: Format set to JSON
'authorization': this.authToken // INFO: Attach token
})
});
}
// INFO: Function to get token from client local storage
loadToken() {
this.authToken = localStorage.getItem('token');; // Get token and assign to variable to be used elsewhere
}
以及一些存储用户状态的功能,即:
// INFO: Function to store user's data in client local storage
storeUserData(token, user) {
localStorage.setItem('token', token); // INFO: Set token in local storage
localStorage.setItem('user', JSON.stringify(user)); // INFO: Set user in local
storage as string
this.authToken = token; // INFO: Assign token to be used elsewhere
this.user = user; // INFO: Set user to be used elsewhere
}
还有一个注销功能来销毁本地存储中的令牌,即:
// INFO: Function for logging out
logout() {
this.authToken = null; // INFO: Set token to null
this.user = null; // INFO: Set user to null
localStorage.clear(); // INFO: Clear local storage
}
如果你使用npm的jsonwebtoken,你可以在生成token的时候设置token的ttl:
const token = jwt.sign({ id: idDB }, "secret", { expiresIn: '24h' });
或任何你想要的 ttl,字符串“secret”指的是与服务器匹配的秘密。