如何在 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Storybook 中使用 NextJS 的 'useRouter()' 钩子
如何在客户端 NextJS 中使用 Apollo GraphQL 订阅?
NextJS + Apollo:如何在 getServerSideProps 内的 apolloClient.query 上获取多个查询?