在 Fastify 中实现 JWT 鉴权

阅读时长 7 分钟读完

JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。它将 JSON 数据进行加密,并生成一个字符串 token,用于传输用户的认证信息。在前端开发中,JWT 鉴权也被广泛应用。在 Fastify 这个高性能的 Node.js Web 框架中,开发者可以使用 fastify-jwt 插件来实现 JWT 鉴权。

fastify-jwt 插件

fastify-jwt 插件是 Fastify 框架的一款插件,它提供了两个核心功能——生成 JWT 和解析 JWT。下面我们来学习一下 fastify-jwt 插件的基本用法。

安装

使用 npm 命令进行安装:

生成 JWT

在插件的使用示例中,我们可以看到如下代码:

-- -------------------- ---- -------
----------------------- ----- --------- ------ -- -
  ----- - --------- -------- - - ------------
  ----- ---- - ----- -------------- -------- --
  -- ------- ------ ---------------------- -------- ------- --

  ----- --------------- - ---------------------------- --------------
  -- ------------------ ------ ---------------------- -------- ------ --

  ----- ----- - ------------------ --- ------- --
  ------------ ----- --
--

在上述代码中,我们调用了 fastify.jwt.sign 方法生成一个 token。这个方法的第一个参数是一个对象,我们可以在这个对象中设置一些用户信息。在本例中,我们设置了用户的 id。fastify.jwt.sign 方法会将这个对象进行加密,并生成一个字符串 token。我们将这个 token 作为接口返回值返回给前端。在后续的访问中,前端需要将这个 token 传到服务端,用于验证用户的身份。

验证 JWT

在接收到前端的请求时,我们需要对传入的 token 进行解密和验证。解密后,我们可以拿到 token 中的用户信息。在插件的使用示例中,我们可以看到如下代码:

-- -------------------- ---- -------
----------------------- ----- --------- ------ -- -
  ----- - ------------- - - ---------------
  -- ---------------- ------ ---------------------- -------- ----- --

  --- -
    ----- ----- - ----------------------------- -- ---
    ----- ------------ - -------------------------
    ----- - -- - - ------------
    ----- ---- - ----- -------------------------------------
    ----------------
  - ----- ----- -
    ---------------------- -------- ----- --
  -
--

在上述代码中,我们从请求头中获取了传来的 token,并使用 fastify.jwt.verify 方法进行验证。如果验证成功,我们可以从解密后的对象中获取用户信息。在本例中,我们拿到了用户的 id,并使用这个 id 查询数据库,获取用户信息。在前端开发中,我们可以将获取到的用户信息用于展示用户的个人信息或者用于权限控制等场景。

示例代码

在下面的代码中,我们使用了 MongoDB 作为数据库,通过 fastify-jwt 插件实现了用户的注册、登录和获取个人信息等操作。

-- -------------------- ---- -------
----- ------- - --------------------
----- -------- - -------------------
----- ------ - -----------------
----- ---------- - ----------------------

-- -----
-------------------------------------------- - ---------------- ----- ------------------- ---- --
  -------- -- -------------------- ------------
  ---------- -- -------------------

-- ------
----- ---------- - --- -----------------
  --------- -------
  --------- -------
  ------ -------
  ------- ------
--

----- ---- - ---------------------- -----------

-- -- ----------- --
---------------------------- - ------- ------------- --

-- ----
----------------------- ----- --------- ------ -- -
  ----- - --------- --------- ------ ------ - - ------------
  ----- -------------- - ------------------------- ---

  --- -
    ----- ---- - --- ------
      ---------
      --------- ---------------
      ------
      ------
    --
    ----- -----------
    ----- ----- - ------------------ --- ------- --
    ------------ ----- --
  - ----- ----- -
    ------------------
    ---------------------- -------- ------- --
  -
--

---------------------- ----- --------- ------ -- -
  ----- - --------- -------- - - ------------
  ----- ---- - ----- -------------- -------- --
  -- ------- ------ ---------------------- -------- ------- --

  ----- --------------- - ---------------------------- --------------
  -- ------------------ ------ ---------------------- -------- ------ --

  ----- ----- - ------------------ --- ------- --
  ------------ ----- --
--

----------------------- ----- --------- ------ -- -
  ----- - ------------- - - ---------------
  -- ---------------- ------ ---------------------- -------- ----- --

  --- -
    ----- ----- - ----------------------------- -- ---
    ----- ------------ - -------------------------
    ----- - -- - - ------------
    ----- ---- - ----- -------------------------------------
    ----------------
  - ----- ----- -
    ---------------------- -------- ----- --
  -
--

-- -----
-------------------- --- -- -
  -- ----- ------------------
  ------------------- --------- -- ---- ------
--

总结

通过今天的学习,我们了解了 Fastify 的 JWT 鉴权插件 fastify-jwt,学习了如何在 Fastify 中使用 JWT 进行用户身份验证和授权。在实际开发中,我们可以根据需要,对示例代码进行修改以适应自己的业务需求,同时保证代码的安全性和可靠性,确保用户信息的安全。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cb10bd5ad90b6d041e9fcf

纠错
反馈