如何在使用 GraphQl 和 Node.js 时验证用户电子邮件
How to verify user email while using GraphQl and Node.js
我正在尝试使用 GraphQL 和 Node.js 在我的宠物项目中实施用户电子邮件验证。
我已经有发送验证令牌的注册解析器,但我只知道当用户单击 link 时,无法将数据从电子邮件发送到下一个将使用的 GraphQL 解析器令牌并验证电子邮件。
所以问题是:我应该让 REST 端点 /verify
来完成这项工作还是有办法使用 /graphql
端点
如果您使用单独的 /verify
端点,您很可能还希望在处理请求后将用户重定向回您的网站。一种方法是有效地逆转此流程,link访问您的网站,然后让您的页面发出必要的 GraphQL 请求。
或者,您可以通过电子邮件中的 link 调用您的 verify
解析器。 express-graphql
将处理 POST
和 GET
请求。不过,使用这种方法有几点需要牢记:
- 它只适用于查询,因此您的 "verify" 字段需要属于查询类型
- 该请求将在浏览器上下文中运行,但如果您从内部调用它(例如 GraphiQL),则会完全失败
这是一个基本示例:
const typeDefs = `
type Query {
verify: Boolean # Can be any nullable scalar
}
`
const resolvers = {
Query: {
verify: (root, args, ctx) => {
// Your verification logic
ctx.res.redirect('https://www.google.com')
}
}
}
const schema = makeExecutableSchema({ typeDefs, resolvers })
app.use('/graphql', graphqlHTTP((req, res) => ({
schema: MyGraphQLSchema,
graphiql: false,
// Inject the response object into the context
context: { req, res },
})))
app.listen(4000)
然后您可以在浏览器中导航至此 url:
http://localhost:4000/graphql?query={verify}
我正在尝试使用 GraphQL 和 Node.js 在我的宠物项目中实施用户电子邮件验证。
我已经有发送验证令牌的注册解析器,但我只知道当用户单击 link 时,无法将数据从电子邮件发送到下一个将使用的 GraphQL 解析器令牌并验证电子邮件。
所以问题是:我应该让 REST 端点 /verify
来完成这项工作还是有办法使用 /graphql
端点
如果您使用单独的 /verify
端点,您很可能还希望在处理请求后将用户重定向回您的网站。一种方法是有效地逆转此流程,link访问您的网站,然后让您的页面发出必要的 GraphQL 请求。
或者,您可以通过电子邮件中的 link 调用您的 verify
解析器。 express-graphql
将处理 POST
和 GET
请求。不过,使用这种方法有几点需要牢记:
- 它只适用于查询,因此您的 "verify" 字段需要属于查询类型
- 该请求将在浏览器上下文中运行,但如果您从内部调用它(例如 GraphiQL),则会完全失败
这是一个基本示例:
const typeDefs = `
type Query {
verify: Boolean # Can be any nullable scalar
}
`
const resolvers = {
Query: {
verify: (root, args, ctx) => {
// Your verification logic
ctx.res.redirect('https://www.google.com')
}
}
}
const schema = makeExecutableSchema({ typeDefs, resolvers })
app.use('/graphql', graphqlHTTP((req, res) => ({
schema: MyGraphQLSchema,
graphiql: false,
// Inject the response object into the context
context: { req, res },
})))
app.listen(4000)
然后您可以在浏览器中导航至此 url:
http://localhost:4000/graphql?query={verify}