如何在使用 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 将处理 POSTGET 请求。不过,使用这种方法有几点需要牢记:

  • 它只适用于查询,因此您的 "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}