如何在 nextJS getserversideprops 中使用 firebase

Posted

技术标签:

【中文标题】如何在 nextJS getserversideprops 中使用 firebase【英文标题】:how to get firebase use in nextJS getserversideprops 【发布时间】:2021-08-10 00:18:53 【问题描述】:

如果有签名用户,我想使用 getServerSideProps 在 Firestore 中获取“示例”文档。 下面的代码不起作用。结果是“无法阅读” 我该怎么办?还是有其他方法?

export const getServerSideProps = () => 
  let currentUser = []

  authService.onAuthStateChanged(async user => 
      if(user) 
        const docRef = dbService.collection('whole_users').doc('sample').get()
        await docRef.then((doc) => 
          if(doc.exists) 
            currentUser.push(doc.data())
          
        )
       else 
        console.log("can't read")
      
    )

  return 
    props: currentUser
  

【问题讨论】:

这一行的用户是从哪里传来的? authService.onAuthStateChanged(async user => 您是否尝试注销用户值? 它只是“onAuthStateChanged”参数。如果“onAuthStateChanged”中有数据,我尝试将数据放入 currentUser。 【参考方案1】:

第一个: 你打电话给get() 没有await。将您的代码更改为:

export const getServerSideProps = () => 
  let currentUser = []

  authService.onAuthStateChanged(async user => 
      if(user) 
        const docRef = dbService.collection('whole_users').doc('sample')
        await docRef.get().then((doc) => 
          if(doc.exists) 
            currentUser.push(doc.data())
          
        )
       else 
        console.log("can't read")
      
    )

  return 
    props: currentUser
  

第二个:onAuthStateChanged 仅用于客户端。要访问服务器端的身份验证状态,您需要将身份验证状态放入提供程序。 Here 是一个例子。

【讨论】:

谢谢,但它不起作用。我想知道为什么我不能在 getServerSideProps 中访问“onAuthStateChanged”,而我可以在组件中访问。 啊抱歉,我刚刚看到错误的get() 电话。我已经更新了答案。基本上,最好的方法是将身份验证状态放入提供程序,以便您可以按预期访问它。有一篇文章的链接详细解释了它。

以上是关于如何在 nextJS getserversideprops 中使用 firebase的主要内容,如果未能解决你的问题,请参考以下文章

在 Reactjs/Nextjs 中选择时如何加粗导航项

如何在 Storybook 中使用 NextJS 的 'useRouter()' 钩子

如何在客户端 NextJS 中使用 Apollo GraphQL 订阅?

如何在 nextJS 中使用 <Head>

NextJS + Apollo:如何在 getServerSideProps 内的 apolloClient.query 上获取多个查询?

如何在 NextJS 中为 getStaticProps 导入 API 路由?