如何在 Next.js + Graphql 解耦架构中转发用户会话?
How to forward user sessions in Next.js + Graphql decoupled architecture?
我正在构建一个 next.js 项目,虽然我通常只使用 "Custom Express Server" method to implement my graphql API (using apollo-server-express),但我认为分离 next.js 项目可能是个好主意来自 graphql API 这样每个服务器都托管在不同的机器上。
但通常我会在 graphql API 中实现任何与会话相关的逻辑,使用类似 graphql-passport 的东西;我认为这是一个很好的做法,因为如果我选择添加另一个前端(可能是移动应用程序或其他东西),它们可以共享相同的会话逻辑。但是考虑到我在服务器端使用 next.js 呈现内容,我如何将用户的会话信息转发到 graphql 服务器? 因为 next.js 服务器不应该不用重做认证吧?
如果架构中也有任何缺陷,请告诉我,我是新手。
使用下一个服务器 运行 GraphQL 服务肯定是 not a good idea,所以是的,请将两者分开。
让 Next 服务器 SSR-render 使用用户 session 包含用户特定内容的页面可能也不是一个好主意,除非您有一些特定的用例需要服务 HTML 页面中已经包含用户特定数据。原因是:
SSR 呈现将需要大量服务器端计算,因为所有页面总是必须重新呈现。
NextJS 正在远离(自 v9.3 起)getInitialPros()
的做事方式,转向使用 getStaticProps()
生成对所有用户通用的页面,并且一旦显示在客户端设备上,就可以直接从 GraphQL API 加载其 session 相关内容。
这种方法通常具有更高的性能和更好的规模。
如果您真的想走 "SSR with user session data" 路线,您可以在 getServerSideProps(context)
方法中开始,其中 context.req
是实际请求,其中包含您所有的 session 数据在其中(cookies 或 headers)。
然后您可以从 req
中提取此 session 数据并将其传递给需要身份验证的 GraphQL 服务器请求。
我正在构建一个 next.js 项目,虽然我通常只使用 "Custom Express Server" method to implement my graphql API (using apollo-server-express),但我认为分离 next.js 项目可能是个好主意来自 graphql API 这样每个服务器都托管在不同的机器上。
但通常我会在 graphql API 中实现任何与会话相关的逻辑,使用类似 graphql-passport 的东西;我认为这是一个很好的做法,因为如果我选择添加另一个前端(可能是移动应用程序或其他东西),它们可以共享相同的会话逻辑。但是考虑到我在服务器端使用 next.js 呈现内容,我如何将用户的会话信息转发到 graphql 服务器? 因为 next.js 服务器不应该不用重做认证吧?
如果架构中也有任何缺陷,请告诉我,我是新手。
使用下一个服务器 运行 GraphQL 服务肯定是 not a good idea,所以是的,请将两者分开。
让 Next 服务器 SSR-render 使用用户 session 包含用户特定内容的页面可能也不是一个好主意,除非您有一些特定的用例需要服务 HTML 页面中已经包含用户特定数据。原因是:
SSR 呈现将需要大量服务器端计算,因为所有页面总是必须重新呈现。
NextJS 正在远离(自 v9.3 起)
getInitialPros()
的做事方式,转向使用getStaticProps()
生成对所有用户通用的页面,并且一旦显示在客户端设备上,就可以直接从 GraphQL API 加载其 session 相关内容。
这种方法通常具有更高的性能和更好的规模。
如果您真的想走 "SSR with user session data" 路线,您可以在 getServerSideProps(context)
方法中开始,其中 context.req
是实际请求,其中包含您所有的 session 数据在其中(cookies 或 headers)。
然后您可以从 req
中提取此 session 数据并将其传递给需要身份验证的 GraphQL 服务器请求。