npm 包 graphql-shield 使用教程

GraphQL 在现代 Web 开发中越来越受欢迎,但是访问控制是每个 GraphQL 应用都需要的一个关键方面。graphql-shield 是一个流行的 npm 包,它可以帮助我们轻松地保护我们的 GraphQL API。

什么是 graphql-shield?

graphql-shield 是一个用于基于角色及权限的访问控制中间件,它采用类似于 Express 中间件的方式来编写安全控制规则。graphql-shield 是与任何 GraphQL 求解器(例如 Apollo Server 、 graphql-yoga )兼容的。

如何使用 graphql-shield?

首先,我们需要安装 graphql-shield 包:

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

接下来,让我们编写我们的安全规则。

编写安全规则

graphql-shield 安全规则是基于 graphql.js 的解析器进行编写的。

安全规则有一组可用的 API。 下面是一些最常用的:

  • allow:允许访问特定字段或查询。
  • deny:拒绝访问特定字段或查询。
  • and:将多个规则组合在一起,所有规则都必须通过才能允许访问。
  • or:将多个规则组合在一起,只需要任何规则通过就可以允许访问。
  • not:否认某些规则的结果,允许不符合这些规则但不被其他规则拒绝的访问。

下面是一个简单的安全规则,仅允许经过身份验证的用户获取文章列表:

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

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

如这个示例中,我们创建了一个名为 isAuthenticated 的规则,并将其应用于 posts 查询字段。 此规则检查用户是否已通过身份验证,如果未通过身份验证,则返回错误。

我们还使用 shield 函数将 permissions 变量与我们的 GraphQL 解析器结合在一起。这个函数将返回一个中间件,该中间件将在 Apollo Server 中使用。

在 Apollo Server 中,使用解析器和中间件

我们现在有了一些安全规则,现在我们需要创建一个GraphQL解析器,并且用 graphql-shield 中间件来保护我们的API。

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

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

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

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

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

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

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

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

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

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

在上面的代码中,我们将 permissions 变量作为我们的 GraphQL 解析器和中间件之间的参数传入了 applyMiddleware 这个函数中,这样就会创建一个新的 GraphQL 解析器,它已被 graphql-shield 中间件保护起来了。

现在,我们已经配置完成了,可以启动服务器并开始测试我们的 API。

测试

当未通过身份验证时,访问我们的 /posts 查询应该返回错误。

当通过身份验证时,访问 /posts 查询应该返回帖子列表。

总结

正如我们所看到的,使用 graphql-shield 包非常容易,任何开发人员都可以轻松地创建一个安全的 GraphQL API。希望本文能够对你有所帮助。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/93598


猜你喜欢

  • npm 包 @alu0100888447/auth 使用教程

    前言 在现代前端开发中,用户认证是非常重要的一环。随着单页应用程序越来越流行,前端用户认证的需求也越来越大。@alu0100888447/auth 是一个非常方便的 npm 包,可以帮助我们快速地进行...

    5 年前
  • npm 包 47pages-keystone 使用教程

    概述 47pages-keystone 是一个基于 Node.js 的前端框架,它提供了一系列简单易用的工具和功能,帮助开发者快速创建高质量的网站。这个框架拥有强大的插件机制,可以快速扩展和定制各种功...

    5 年前
  • npm 包 @warp-works/warpjs-utils 的使用教程

    简介 在前端领域中,用于构建网站和应用程序的包已经非常普遍。npm 是一个广泛使用的包管理器,用于安装和管理这些包。本教程将介绍来自 npm 上的一个工具包 @warp-works/warpjs-ut...

    5 年前
  • npm包 @warp-works/warpjs-plugins使用教程

    介绍 在前端开发中,我们常常会用到各种npm包来辅助我们的开发工作。其中,@warp-works/warpjs-plugins是一款非常实用的工具包。该包主要提供了一些常用的插件,如:表格插件、搜索插...

    5 年前
  • npm 包 @quoin/expressjs-routes-info 使用教程

    在使用 Express.js,也许会遇到一个问题,那就是不容易对路由和中间件进行诊断和调试。@quoin/expressjs-routes-info 这个 npm 包的作用就是解决这个问题,它可以在终...

    5 年前
  • npm 包 @quoin/node-test-helpers 使用教程

    简介 npm 是一个 Node.js 包管理器,可以为 Node.js 系统提供各种便捷的包。@quoin/node-test-helpers 是用于编写 Node.js 单元测试的 npm 包,提供...

    5 年前
  • npm 包 @quoin/eslint-config-quoin 使用教程

    简介 在前端开发中,代码质量的高低直接影响到项目的可维护性和可扩展性。因此,在项目开发过程中,我们通常会使用一些静态代码分析工具(比如 ESLint)来检查代码质量,避免常见的错误和问题。

    5 年前
  • npm 包 dht.js 使用教程

    简介 dht.js 是一个基于 Node.js 的分布式哈希表(DHT)实现。它可以轻松地在多个节点之间分布键值对,并提供了一些用于查询和操作 DHT 的 API。

    5 年前
  • npm 包 dht-bencode 的使用教程

    DHT-bencode 是一个 Node.js 模块,用于对 BitTorrent dht 网络的 bencode 格式的消息进行编解码。本文将提供详细的 dht-bencode 的使用教程,包括编码...

    5 年前
  • 前端必备工具 —— npm 包 btparse 使用教程

    在前端开发中,我们经常需要解析一个复杂的文本字符串。手动解析不仅会增加开发难度,还极易出错。为了解决这个问题,我们可以使用 npm 包 btparse。 什么是 btparse? btparse 是一...

    5 年前
  • npm 包 bncode 使用教程

    介绍 bncode 是一个在 BitTorrent 协议中使用的编码方式。它可以将一些复杂的数据类型编码成二进制字符串,方便在网络上传输和存储。npm 包 bncode 实现了 bncode 的编码和...

    5 年前
  • NPM 包 Bencoding 的使用教程

    Bencoding 是一个可以将字节流编码/解码为 JavaScript 对象的 NPM 包。它可以被用于解析 BitTorrent 协议中的元数据文件(.torrent 文件),也可以被用于其他需要...

    5 年前
  • npm 包 @types/socket.io 使用教程

    在前端开发中,我们经常需要使用 Socket.IO 实现实时通信功能。而在 TypeScript 项目中,我们需要定义和使用 Socket.IO 事件和其它相关类型。

    5 年前
  • NPM 包 @types/config 使用教程

    在前端开发中,我们经常需要配置一些变量、参数或者环境信息。而 @types/config 就是一个帮助我们管理配置信息的 NPM 包。 安装 @types/config 在使用 @types/conf...

    5 年前
  • npm 包 @types/bcryptjs 使用教程

    在前端开发中,数据的存储与保护是至关重要的。对于密码等敏感数据的加密,我们可以使用 bcryptjs 这个 npm 包。在 TypeScript 项目中,为了提高代码的类型安全性,我们需要安装 @ty...

    5 年前
  • npm 包 @types/jsonwebtoken 使用教程

    在前端开发中,安全性是非常重要的一个方面。为了保护用户数据不被泄露,我们常常使用颁发的 JWT(JSON Web Token)来进行身份验证和访问控制。而在 TypeScript 开发时,则需要使用 ...

    5 年前
  • npm 包 @types/swiper 使用教程

    Swiper 是一个流行的现代滑动视图框架,它可以帮助我们创建各种类型的交互式、移动友好的 Web 应用程序。而 @types/swiper 就是 Swiper 在 TypeScript 中的类型定义...

    5 年前
  • npm 包 @stencil/utils 使用教程

    简介 @stencil/utils 是一个基于 Stencil 的工具包,其中包含了一些常用的工具方法,如 generateUniqueId、hasShadowDom、isIE、raf、removeA...

    5 年前
  • npm 包 @stencil/postcss 使用教程

    前端开发中,CSS 的编写和维护是一个非常重要的任务。随着 CSS 的复杂性不断增加,需要使用各种工具来简化这个过程。其中,PostCSS 是一个非常流行的工具之一,它可以帮助我们自动化处理 CSS,...

    5 年前
  • npm 包 @deckdeckgo/utils 使用教程

    什么是 @deckdeckgo/utils @deckdeckgo/utils 是一个可以用于 DeckDeckGo 幻灯片平台的 JavaScript 实用工具库,它包含了许多常规应用中常用的方法和...

    5 年前

相关推荐

    暂无文章