npm 包 anywhere-auth 使用教程

阅读时长 7 分钟读完

简介

在现代 web 应用中,我们通常需要实现用户身份验证和会话管理等功能。为了避免重复造轮子,我们可以使用第三方的身份认证包来加速开发。npm 包 anywhere-auth 是一个轻量级的身份认证包,能够帮助我们快速搭建身份认证和会话管理的框架。本文将介绍如何使用该包进行开发。

安装

使用以下命令安装 anywhere-auth

初始化

在项目中引入 anywhere-auth

然后初始化 AnywhereAuth 对象并传入一个配置项:

配置项包括:

  • secret:用于加密和解密用户会话的密钥;
  • cookie:cookie 相关配置,包括 name(cookie 名字,默认为 auth)、maxAge(cookie 最大有效期,默认为 7 天)、httpOnly(是否只能通过 HTTP 访问,默认为 true)等等;
  • session:session 相关配置,包括 store(session 存储方式,默认为一个简单的内存存储器)、maxAge(session 最大有效期,默认为 1 小时)等等;
  • jwt:jwt 相关配置,包括 algorithm(jwt 的签名算法,默认为 HS256)、expiresIn(jwt 的有效期,默认为 1 小时)等等。

设计用户模型

anywhere-auth 不负责用户管理,需要我们自己设计用户模型并实现相应的方法。例如,我们可以设计一个用户模型如下:

然后,我们需要实现以下方法:

  • getUserByName(username: string) -> {username: string, password: string, roles: array}:根据用户名获取用户;
  • comparePassword(password: string, hash: string) -> boolean:用于比较密码和密码哈希值是否一致。

例如,我们可以使用 MongoDB 存储用户数据,并实现以上两个方法:

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

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

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

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

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

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

实现身份认证路由

为了实现身份认证和会话管理,我们需要独立于应用的一些路由,例如登录、注册、注销等。在这些路由中,我们使用 anywhere-auth 提供的方法来完成相应的功能。

注册

首先,我们需要实现用户注册的路由。当用户注册成功后,我们需要为其建立一个会话并返回一个 token。

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

anywhereAuth.createToken() 方法中,默认会将用户角色存放在 jwt payload 中,以便后续对用户角色进行鉴权。

登录

在用户登录成功后,我们需要为其建立一个会话并返回一个 token。

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

注销

注销会话时,我们只需要删除客户端上的 token 即可。

鉴权

在某些受保护的路由上,我们需要对用户进行鉴权。例如,管理员才能访问的路由:

anywhereAuth.checkRole() 方法的作用是验证用户是否拥有某个角色。如果用户不存在或者角色不匹配,该方法会返回 401,否则可以通过该方法进行身份认证和授权。

示例代码

完整的示例代码可以参考以下 Github 仓库:https://github.com/anywhere-consortium/anywhere-auth-demo

总结

anywhere-auth 是一个轻量级的身份认证包,可以帮助我们快速搭建身份认证和会话管理的框架。在使用该包时,我们需要自行设计用户模型并实现相应的方法。同时,在实现路由时,我们也需要加入相应的鉴权逻辑,以确保应用的安全性。

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

纠错
反馈