GraphQL(6):认证与中间件

下面用简单来讲述GraphQL的认证示例

1 实现代码

在代码中添加过滤器:

完整代码如下:

const express = require('express');
const {buildSchema} = require('graphql');
const grapqlHTTP = require('express-graphql').graphqlHTTP;
// 定义schema,查询和类型, mutation
const schema = buildSchema(`
    input AccountInput {
        name: String
        age: Int
        sex: String
        department: String
    }
    type Account {
        name: String
        age: Int
        sex: String
        department: String
    }
    type Mutation {
        createAccount(input: AccountInput): Account
        updateAccount(id: ID!, input: AccountInput): Account
    }
    type Query {
        accounts: [Account]
    }
`)

const fakeDb = {};

// 定义查询对应的处理器
const root = {
    accounts() {
        var arr = [];
        for(const key in fakeDb) {
            arr.push(fakeDb[key])
        }
        return arr;
    },
    createAccount({ input }) {
        // 相当于数据库的保存
        fakeDb[input.name] = input;
        // 返回保存结果
        return fakeDb[input.name];
    },

    updateAccount({ id, input }) {
        // 相当于数据库的更新
        const updatedAccount = Object.assign({}, fakeDb[id], input);
        fakeDb[id] = updatedAccount;
        // 返回保存结果
        return updatedAccount;
    }
}

const app = express();

const middleware = (req, res, next) => {
    if(req.headers.cookie==null){
        res.send(JSON.stringify({
            error: "您没有权限访问这个接口"
        }));
        return;
    }

    if(req.url.indexOf('/graphql') !== -1 && req.headers.cookie.indexOf('auth') === -1) {
        res.send(JSON.stringify({
            error: "您没有权限访问这个接口"
        }));
        return;
    }
    next();
}

app.use(middleware);

app.use('/graphql', grapqlHTTP({
    schema: schema,
    rootValue: root,
    graphiql: true
}))

app.listen(3000);

访问效果如下:

这边我直接在浏览器修改cookie,如下:

在刷新页面,访问成功。

相关推荐

  1. 中间rabbitmq

    2024-06-12 15:20:02       35 阅读
  2. cookie,session、中间、csrf认证相关【补充】

    2024-06-12 15:20:02       32 阅读
  3. Django大回顾 - 8 中间、csrf认证相关

    2024-06-12 15:20:02       30 阅读
  4. 云容器中间

    2024-06-12 15:20:02       11 阅读
  5. 中间

    2024-06-12 15:20:02       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 15:20:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 15:20:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 15:20:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 15:20:02       18 阅读

热门阅读

  1. rk3576作为2024行业新秀,那么rk3588和rk3399

    2024-06-12 15:20:02       7 阅读
  2. Hadoop之HDFS分布式文件系统

    2024-06-12 15:20:02       4 阅读
  3. DevOps的原理及应用详解(三)

    2024-06-12 15:20:02       7 阅读
  4. 【日常记录】Jackson如何支持org.joda.time.DateTime

    2024-06-12 15:20:02       8 阅读
  5. 力扣-2225

    2024-06-12 15:20:02       6 阅读
  6. Lua 基础 05 时间

    2024-06-12 15:20:02       8 阅读
  7. leetcode刷题记录38-16. 最接近的三数之和

    2024-06-12 15:20:02       6 阅读
  8. 高低温测试发现文件被篡改

    2024-06-12 15:20:02       7 阅读
  9. 架构设计-如何安全地传输密码

    2024-06-12 15:20:02       5 阅读
  10. 【名词解释】Unity中的Scrollbar组件及其使用示例

    2024-06-12 15:20:02       6 阅读
  11. 大数据的定义特点与应用场景?

    2024-06-12 15:20:02       6 阅读
  12. 网络数据库后端面试题

    2024-06-12 15:20:02       8 阅读
  13. c++:回顾(一)

    2024-06-12 15:20:02       8 阅读
  14. 杂项——编码器控制小车走固定距离(stm32)

    2024-06-12 15:20:02       9 阅读
  15. 2833.距离原点最远的点

    2024-06-12 15:20:02       11 阅读
  16. 亚马逊云服务器价格贵不贵?

    2024-06-12 15:20:02       10 阅读