npm 包 byu-jwt 使用教程

阅读时长 8 分钟读完

简介

byu-jwt 是一个用于解析和验证 JSON Web Token (JWT) 的 Node.js 模块。JWT 是一个轻量级的身份认证和授权协议,可以在跨域场景下传输数据和验证身份。

本文将介绍如何使用 byu-jwt 模块。

安装

在命令行中输入以下命令即可安装 byu-jwt:

使用

以下是一个简单的使用示例:

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

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

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

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

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

以上代码将输出:

API

byu-jwt 模块提供了以下 API:

  • decode(token, secret): 解码 JWT 并返回一个对象,可以从对象中提取出所需的信息,例如用户 ID 和其他的元数据。
  • verify(token, secret): 验证 token 的签名是否正确并返回一个布尔值。如果签名正确,返回 true;否则返回 false。
  • sign(payload, secret): 签发一个 JWT 并返回一个字符串,可以将该字符串返回给客户端,客户端可以将其保存在 cookie 或 localStorage 中。
  • refresh(token, secret): 刷新一个 JWT 并返回一个新的 JWT。刷新操作通常用于更新 token 上的一些元数据,例如刷新 token 的过期时间。

示范

下面我们将提供一个完整的示例来演示如何使用 byu-jwt 来实现认证。这个示例将建立一个可登录和注销的网站。该示例要求用户输入他们的用户名和密码以进行身份验证。如果验证成功,将向用户发放一个 JWT。该网站的其他页面将检查用户是否已经登录,并根据其登录状态显示不同的内容。

启动服务器

首先,我们要启动一个简单的 Node.js 服务器。我们将使用 Express.js。

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

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

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

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

注册和登录

现在我们创建一个 HTML 页面,其中包含注册和登录表单。

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

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

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

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

接下来,我们将在服务器上创建用于处理注册和登录表单的路由。

现在,我们可以实现注册和登录的逻辑。

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

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

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

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

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

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

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

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

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

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

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

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

我们检索用户仅基于其电子邮件和密码。在现实世界中,这种方式很容易受到攻击。可能更好的方法是使用密码哈希和 salting。

当用户登录成功时,我们签发一个新的 JWT 并将其添加到用户的 cookies 中。这个 JWT 是通过假设电子邮件地址是可以唯一标识用户的来签发的。这个假设有一些与现实不匹配的地方,比如有多个用户注册了相同的电子邮件地址,或者用户在更改电子邮件地址后忘记更新旧权限。

鉴定身份

现在我们已经有了一个可登录的网站,我们必须对它进行身份验证才能防止任何人未经授权地访问它。以下是一个授权的路由,只允许已经登录的用户访问:

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

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

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

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

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

我们使用 isLoggedIn 中间件来检查用户是否已经登录,每次请求都会调用该中间件。在这个例子中,如果用户未登录,我们会直接返回 401 状态码。如果用户已登录,则从 cookie 中读取 JWT 并对其进行验证。只有在 JWT 有效的情况下,用户才能访问他们的个人资料页面。

注销

最后,为了实现注销功能,我们只需要从 cookie 中删除 JWT。

总结

本文介绍了如何使用 byu-jwt 模块,以实现身份验证和授权。虽然 JWT 是一种非常流行的身份验证方式,但它并不适用于所有应用场景。您应该评估、选择和实现最适合您应用程序需求的身份验证方案。

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

纠错
反馈