欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > GraphQL(6):认证与中间件

GraphQL(6):认证与中间件

2025/8/11 14:16:26 来源:https://blog.csdn.net/u013938578/article/details/139506515  浏览:    关键词: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: Stringage: Intsex: Stringdepartment: String}type Account {name: Stringage: Intsex: Stringdepartment: String}type Mutation {createAccount(input: AccountInput): AccountupdateAccount(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,如下:

在刷新页面,访问成功。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com