我正在尝试使用 GraphQL 和 Node.js 在我的宠物项目中实现用户电子邮件验证。
我已经有了发送验证 token 的注册解析器,但我刚刚了解到,当用户单击链接时,无法将数据从电子邮件发送到下一个使用 token 并验证电子邮件的 GraphQL 解析器。
所以问题是:我应该让 REST 端点 /verify
来完成工作,还是有办法使用 /graphql
端点
最佳答案
如果您使用单独的 /verify
端点,您很可能还希望在处理请求后将用户重定向回您的网站。一种方法是有效地逆转此流程,链接到您的网站,然后让您的页面发出必要的 GraphQL 请求。
或者,您可以通过电子邮件中的链接调用您的verify
解析器。 express-graphql
将处理 POST
和 GET
请求。不过,使用这种方法需要记住以下几点:
- 它仅适用于查询,因此您的“验证”字段需要位于查询类型
- 该请求将在浏览器上下文中运行,但如果您从内部调用它,例如 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)
然后您可以在浏览器中导航到此网址:
http://localhost:4000/graphql?query={verify}
关于javascript - 如何在使用 GraphQl 和 Node.js 时验证用户电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55530949/