如何在使用GraphQl和Node.js时验证用户电子邮件

时间:2019-04-05 08:08:43

标签: javascript node.js graphql email-verification

我正在尝试使用GraphQL和Node.js在我的宠物项目中实施用户电子邮件验证。

我已经有signUp解析器来发送验证令牌,但是我刚刚了解,当用户单击链接时,无法将数据从电子邮件发送到下一个使用该令牌并验证电子邮件的GraphQL解析器。

所以问题是:我应该让REST端点/verify来完成这项工作,还是有一种使用/graphql端点的方法

1 个答案:

答案 0 :(得分:1)

如果您使用单独的/verify端点,则很可能在处理请求后也希望将用户重定向回您的站点。一种方法是有效逆转此流程,链接到您的网站,然后让您的页面提出必要的GraphQL请求。

或者,您可以通过电子邮件中的链接调用verify解析器。 express-graphql将同时处理POSTGET请求。但是,使用此方法时需要牢记以下几点:

  • 它仅适用于查询,因此您的“验证”字段必须为“查询”类型
  • 该请求将在浏览器上下文中运行,但是如果您从内部调用它,例如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}