【问题标题】:get the userid of a user onCreate and update db在创建和更新数据库时获取用户的用户 ID
【发布时间】:2018-10-23 20:30:08
【问题描述】:

我正在尝试编写一个云函数,用于检测何时使用 oncreate((user) 函数创建了新用户,然后将值 50 添加到 points 字段中。 这就是创建的内容:

我要做的只是检测用户何时被创建,获取 ID 并将点值更改为 50,它必须是云功能。 这就是我的代码目前的样子。

    exports.updatepoints = functions.auth.user().onCreate((user) => {

  const userID = firebase.auth.currentUser.uid; 
  return updatepoints(userID)
});

async function updatepoints(userID) {
  return firebase.database().ref('mobile_user/' + userID).set(
    {
      points: 50
    });
};

我对 JS 和 firebase 还很陌生,因此非常感谢任何指导帮助。

【问题讨论】:

  • 这里的标识符firebase是什么?如果您尝试在 Cloud Functions 中使用 javascript 客户端库,那不是正确的方法。您需要改用管理 SDK。此外,您可能希望从 auth 触发器的文档开始,因为您需要了解 user 参数是什么。 firebase.google.com/docs/functions/auth-events
  • 仅供参考,您的async 是多余的
  • 用户是使用 Admin/Node SDK 创建的客户端(JavaScript/Web SDK)还是服务器端?

标签: javascript firebase firebase-authentication google-cloud-functions


【解决方案1】:

我会这样做:

首先我会更改函数的名称以真正说明函数正在做什么,在这种情况下初始化用户。所以initUser。

然后您的函数以用户的形式接收数据。使用它来获取有关创建用户的信息并将数据保存到 Firebase。

这样的事情应该可以工作。

import { auth } from 'firebase-functions';
import { database } from 'firebase-admin';

exports.initUser = functions.auth.user().onCreate((user) => {

const mobileUser = {
email: user.email,
points: 50,
subscribedToMailingList: true
}    

const ref = database().ref(`mobile_user/${user.uid}`);

  return ref.set(mobileUser)
    .then(() => console.log(`Created user: ${user.email}`))
    .catch((error) => console.log(`Error: ${error}`));

【讨论】:

  • 恕我直言,您应该返回 set() 返回的承诺,例如 return ref.set(mobileUser)....。更多详情请看官方视频系列firebase.google.com/docs/functions/video-series,特别是“Learn JavaScript Promises (Pt. 2) with a Firestore Trigger in Cloud Functions”
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 2017-10-02
  • 2017-09-18
相关资源
最近更新 更多