Express react apollo graphql和google身份验证流

Express react apollo graphql和google身份验证流,express,authentication,graphql,react-apollo,google-authentication,Express,Authentication,Graphql,React Apollo,Google Authentication,我正在尝试在一个基于react apollo graphql的应用程序上与google进行完整的流验证。我使用graphql/express作为前端部件,使用graphql/express作为后端部件。 我当前的身份验证流程是: 从前端使用react google登录获取google令牌id 使用令牌ID调用我的graphql服务器的Google登录 参数 在后端使用react auth库的verifyIdToken函数和get 用户的有效负载,并创建或获取与的电子邮件匹配的用户 有效载荷 在

我正在尝试在一个基于react apollo graphql的应用程序上与google进行完整的流验证。我使用graphql/express作为前端部件,使用graphql/express作为后端部件。 我当前的身份验证流程是:

  • 从前端使用react google登录获取google令牌id
  • 使用令牌ID调用我的graphql服务器的Google登录 参数
  • 在后端使用react auth库的verifyIdToken函数和get 用户的有效负载,并创建或获取与的电子邮件匹配的用户 有效载荷
  • 在前端发送用户信息和当前令牌ID
  • 在前端,将后端的响应存储到 实例化用户会话并使用它来管理我的会话的路由 应用程序
我的授权流程基本相同:graphql上下文中的后端,检查授权头中的令牌Id,使用
googleauth库的verifyIdToken
获取用户负载并返回找到的用户。在每个受保护的变异中,检查graphql上下文是否有用户字段

在这个流程中,我遇到了几个问题,我没有解决方案来正确地修复这些问题。我的第一个问题是,当用户连接很长时间时,存储在授权标头中的tokenId将被弃用。我不知道如何刷新用户连接。我唯一的实际解决方案是,当服务器抛出身份验证错误时,将用户重定向到登录页面,基本上使用react google login的自动登录再次启动身份验证过程。
我担心我的身份验证/授权流程不好。如果有人对我的流程有任何建议或意见,请让我知道。提前感谢您的帮助

关于如何刷新用户令牌/连接,您应该能够使用来自Google res的refreshTokenSetup功能,它将以简单的方式为您处理新的令牌ID

我在这里发现了一篇非常有用的文章:

这是另一个很好的例子: