在前端开发中,使用 JWT (Json Web Token) 实现用户认证和授权是一个非常流行的做法。而 jwt_me 是一个在 Node.js 中使用 JWT 的 npm 包,它提供了简单易用的 API,使得我们可以更方便地使用和管理 JWT。
安装
安装 jwt_me 只需要使用 npm 命令即可:
npm install jwt_me
API
jwt_me 中提供了以下几个 API:
1. sign(payload, secret, options)
使用指定的 secret
对 payload
进行签名,并返回一个 JWT 字符串。
payload
:要签名的 JSON 对象。secret
:签名用的字符串,在服务器端保密。options
:可选配置项。expiresIn
:JWT 的有效期,单位为秒,默认为3600
。algorithm
:签名算法,默认为HS256
。
示例代码:
const jwt = require('jwt_me'); const payload = { userId: '123456', role: 'admin' }; const secret = 'my-secret-key'; const token = jwt.sign(payload, secret, { expiresIn: 3600, algorithm: 'HS256' }); console.log(token);
2. verify(token, secret, options)
验证并解密 JWT,返回解密后的对象或抛出异常。
token
:要验证的 JWT 字符串。secret
:签名用的字符串,在服务器端保密。必须与sign
的secret
一致。options
:可选配置项。algorithms
:签名算法列表,默认为['HS256']
。
示例代码:
const jwt = require('jwt_me'); const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NTYiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE2MjUzNjUwMjYsImV4cCI6MTYyNTM2ODcyNn0.Gplj_j1rT7VW-oPH8ytv7hUckJD6s-7MuWZ9JdZ7VtM'; const secret = 'my-secret-key'; const payload = jwt.verify(token, secret, { algorithms: ['HS256'] }); console.log(payload);
3. decode(token, options)
解析 JWT,但不会验证签名。
token
:要解析的 JWT 字符串。options
:可选配置项。
示例代码:
const jwt = require('jwt_me'); const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NTYiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE2MjUzNjUwMjYsImV4cCI6MTYyNTM2ODcyNn0.Gplj_j1rT7VW-oPH8ytv7hUckJD6s-7MuWZ9JdZ7VtM'; const payload = jwt.decode(token); console.log(payload);
示例
下面是一个完整的示例,演示了如何使用 jwt_me 进行用户认证和授权。
-- -------------------- ---- ------- ----- --- - ------------------ ----- ------- - ------------------- ----- --- - ---------- ----- ------ - ---------------- -- ------- ----- ----- - - - --- -- --------- -------- --------- ----------- ----- ------- -- - --- -- --------- -------- --------- ----------- ----- ------ -- -- -- ---- ------------------ ----- ---- -- - ----- - --------- -------- - - --------- -- --------- ----- ---- - ------------ -- ---------- --- ---------- -- ------ -- ------------- --- --------- - ------ -------------------- - -- -- --- ----- ----- - ---------- ------- -------- ----- --------- -- -------- ---------- ----- --- --- -- ------- ----------------- ----- ---- -- - ----- ----- - ---------------------------------- ------ -- -------- - ------ -------------------- - --- - -- -- --- ----- - ------- ---- - - ----------------- -------- -- ----- --- -------- - ------ -------------------- - ---------- ------- ---- --- - ----- - -------------------- - --- ---------------- -- -- - ------------------- ------- -- ---- ------- ---
在实际开发中,我们可以将授权逻辑封装成一个中间件,以方便在多个接口中使用。例如:
-- -------------------- ---- ------- -- ----- -------- --------------- - ------ ----- ---- ----- -- - ----- ----- - ---------------------------------- ------ -- -------- - ------ -------------------- - --- - -- -- --- ----- - ------- ----- -------- - - ----------------- -------- -- ----- -- -------- --- ----- - ------ -------------------- - -------- - - ------- ----- -------- -- ------- - ----- - -------------------- - -- - -- ----- ----------------- ------------------- ----- ---- -- - ----- - ------- ---- - - --------- ---------- ------- ---- --- ---
这样,我们就可以轻松地实现基于 JWT 的用户认证和授权功能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005663e81e8991b448e2452