Next.js 应用如何使用 Session 存储用户信息?

阅读时长 9 分钟读完

在前端应用的开发过程中,由于 HTTP 协议的无状态特性,前端无法像后端一样直接存储用户信息。因此,前端需要通过一些方法来实现用户信息的存储。其中,Session 是一种常见的解决方案,Next.js 也支持使用 Session 存储用户信息。本文将介绍 Next.js 应用如何使用 Session 存储用户信息,内容包括 Session 的基本概念、使用 Session 存储用户信息的步骤,以及代码示例。

Session 的基本概念

Session 是指在服务器端记录客户端状态的机制。具体来说,当客户端请求服务器时,服务器会创建一个 Session,将 Session ID 返回给客户端。客户端在后续的请求中,将该 Session ID 发送至服务器,服务器据此获取 Session 信息。Session 常用于存储用户的登录状态或购物车信息等。需要注意的是,Session 只是一种机制,具体的实现方式可以有多种,常用的实现方式包括 Cookie 和 Redis。

使用 Session 存储用户信息的步骤

在 Next.js 应用中使用 Session 存储用户信息,可以通过以下步骤实现:

  1. 安装 cookie-parser 和 express-session

在 Next.js 应用目录下,输入以下命令:

  1. 在 pages/api 目录下新建 auth.js 文件,用于处理用户登录和退出

在 auth.js 文件中,需要导入 cookie-parser 和 express-session,并配置中间件。具体代码如下:

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

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

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

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

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

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

其中,authHandler 中定义了 POST 和 DELETE 方法,分别用于实现用户登录和退出。在用户登录成功后,我们将用户名信息存储在 req.session.user 中,以便后续的使用。

middleware 中配置了 cookie-parser 和 express-session 中间件。其中,cookie-parser 用于解析 Cookie,express-session 用于创建 Session。session 中的 secret 需要设置为加密字符串,以确保 Session 数据的安全性。cookie 中的 maxAge 指定了 Session 的有效期,超过该时间后,Session 将失效。

  1. 在 pages/_app.js 文件中编写代码,用于在页面中获取 Session 信息

在 pages/_app.js 文件中,我们可以通过 useRouter 和 useSWR 自定义 Hook,在客户端渲染时获取用户登录状态。具体代码如下:

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

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

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

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

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

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

其中,useUser 用于获取用户信息,该 Hook 发送 GET 请求至 /api/auth,返回的数据中包含用户信息。如果用户已登录,则显示用户信息和退出按钮;否则,显示提示信息和登录链接。handleLogout 函数用于退出登录,发送 DELETE 请求至 /api/auth,清空 Session 数据,并跳转到首页。

  1. 在客户端渲染时,发送 POST 请求完成登录操作

在登录页面中,我们可以通过表单向服务器发送 POST 请求,完成登录操作。具体代码如下:

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

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

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

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

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

在该页面中,我们通过 useState 和 useRouter Hook 分别管理表单输入和路由跳转。handleSubmit 函数用于提交表单,向服务器发送 POST 请求,并跳转到首页。请求中的数据包含表单输入的用户名和密码。

示例代码

完整的示例代码可以在我的 Github 仓库中查看:https://github.com/Jooger/next-session-example

该仓库包含了一个完整的 Next.js 应用,并包含了使用 Session 存储用户信息的示例代码。如果你对使用 Session 存储用户信息还不太熟悉,可以下载仓库代码,阅读示例代码并亲自运行一下,以此加深理解。

总结

本文介绍了 Next.js 应用如何使用 Session 存储用户信息,包括 Session 的基本概念、使用 Session 存储用户信息的步骤,以及代码示例。使用 Session 存储用户信息是前端应用中常见的解决方案,掌握这种方式,对于实现用户登录状态的管理是有帮助的。

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

纠错
反馈