在使用Neo4j和GraphQL将创建时的$jwt.sub
绑定到属性时,我们需要理解几个基础概念以及它们之间的交互方式。
$jwt.sub
是JWT中的一个标准声明,代表JWT所代表的主体的唯一标识符,通常是用户的唯一ID。要将$jwt.sub
绑定到Neo4j中的属性,我们通常需要在GraphQL的解析器中进行操作。
首先,定义GraphQL schema,包括类型和mutation。
type User {
id: ID!
username: String!
email: String!
}
type Mutation {
createUser(input: CreateUserInput!): User!
}
input CreateUserInput {
username: String!
email: String!
}
在解析器中,我们将从JWT中提取$jwt.sub
,并将其作为用户的唯一标识符。
const { ApolloServer, gql } = require('apollo-server');
const neo4j = require('neo4j-driver');
// 假设已经验证了JWT并提取了$jwt.sub
const jwtSub = '用户的唯一ID';
const typeDefs = gql`
// ... 上面的schema ...
`;
const resolvers = {
Mutation: {
createUser: async (_, { input }, { driver }) => {
const session = driver.session();
try {
const result = await session.run(
`
CREATE (u:User {id: $id, username: $username, email: $email})
RETURN u
`,
{ id: jwtSub, username: input.username, email: input.email }
);
return result.records[0].get('u');
} finally {
await session.close();
}
},
},
};
const driver = neo4j.driver('bolt://localhost:7687', neo4j.auth.basic('username', 'password'));
const server = new ApolloServer({ typeDefs, resolvers, context: () => ({ driver }) });
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
确保Neo4j数据库已经启动并配置了正确的连接参数。
这种绑定通常用于用户认证和授权场景。例如,当用户通过GraphQL API创建新资源时,我们希望自动将该用户的身份(由JWT中的$jwt.sub
表示)与该资源关联起来。这样,我们可以轻松地跟踪哪些资源属于哪个用户,从而实现细粒度的访问控制。
请注意,上述代码示例仅用于说明目的,并未包含所有可能的错误处理和验证逻辑。在实际应用中,你需要根据具体需求进行相应的扩展和完善。
领取专属 10元无门槛券
手把手带您无忧上云