首页 > 解决方案 > 无法部署异步 Firebase 功能

问题描述

我正在尝试使用以下功能添加用户角色。该功能应部署为 firebase 功能。

const functions = require('firebase-functions')
const admin = require('firebase-admin')

admin.initializeApp()
const db = admin.firestore()

exports.AddUserRole = functions.auth.user().onCreate(async (authUser) => {
  if (authUser.email) {
    const customClaims = {
      admin: true,
    }
    try {
      let _ = await admin.auth().setCustomUserClaims(authUser.uid, customClaims)
      return db.collection('roles').doc(authUser.uid).set({
        email: authUser.email,
        role: customClaims,
      })
    } catch (error) {
      console.log(error)
    }
  }
})

当我尝试使用 firebase deploy --only functions:AddUserRole 进行部署时,我收到一个错误 Parsing error: Unexpected token =>并且部署失败。

如果我删除异步/等待它工作得很好,但我需要异步等待这个和未来的功能,所以我想知道我做错了什么。

一些额外的信息。我正在使用节点 v.12.21.0 和所有 firebase 工具/SDK 等的最新版本。

标签: javascriptfirebaseasync-awaitfirebase-authentication

解决方案


我认为您可以删除“_ = ...”并等待在角色中设置新文档的响应并返回它。

这只是一个建议,但我希望它有所帮助。

exports.AddUserRole = functions.auth.user().onCreate(async (authUser) => {
  if (authUser.email) {
    const customClaims = {
      admin: true,
    }
  try {
    await admin.auth().setCustomUserClaims(authUser.uid, customClaims)
    //Or whatever you want to call it
    const updatedRole = await db.collection('roles').doc(authUser.uid).set({
      email: authUser.email,
      role: customClaims,
    })
      return updatedRole
    } catch (error) {
      console.log(error)
    }
  }
})

推荐阅读