指令
此页面描述了如何在 OGM 中使用指令以及哪些指令被排除。
@private
@private
指令允许指定哪些字段只能通过 OGM 访问。当需要隐藏诸如密码之类的字段时,这是一个有用的功能。
定义
"""Instructs @neo4j/graphql to only expose a field through the Neo4j GraphQL OGM."""
directive @private on FIELD_DEFINITION
用法
给定以下类型定义
type User {
username: String!
email: String!
password: String! @private
}
在您的应用程序中,您可能希望散列密码并将其隐藏在公众视野之外。这可以通过使用 OGM 的自定义解析器来完成,以更新和设置密码。
当您想要使用相同的类型定义来驱动面向公众的模式和 OGM 时,这种情况变得更加明显。例如
import { Neo4jGraphQL } from "@neo4j/graphql";
import { OGM } from "@neo4j/graphql-ogm";
import neo4j from "neo4j-driver";
const driver = neo4j.driver(
"bolt://localhost:7687",
neo4j.auth.basic("username", "password")
);
const typeDefs = `
type User {
username: String!
email: String!
password: String! @private
}
`;
// public without password
const neoSchema = new Neo4jGraphQL({ typeDefs, driver });
// private with access to password
const ogm = new OGM({ typeDefs, driver });
Promise.all([neoSchema.getSchema(), ogm.init()]).then(([schema]) => {
const apolloServer = new ApolloServer({ schema });
})
排除的指令
以下指令已从 OGM 的模式中排除
-
@authentication
-
@authorization
-
@subscriptionsAuthorization
-
@query
-
@mutation
-
@subscription
-
@filterable
-
@selectable
-
@settable
原因是 OGM 仅在以编程方式使用时才会使用,而不是需要这些安全措施的公开 API。有关更多信息,请参阅关于Neo4j GraphQL 指令的页面。