【问题标题】:Get user's displayname in firebase function once account is created创建帐户后,在 firebase 函数中获取用户的显示名称
【发布时间】:2018-12-13 20:57:09
【问题描述】:

我有一个 Android 应用程序,用户使用他们的电子邮件密码显示名称注册一个帐户。我想在用户创建帐户后向他们发送欢迎电子邮件。这就是我创建帐户并设置其显示名称的方式。

// This happens in Android (RegisterActivity.java) where I create user's account
FirebaseAuth auth = FirebaseAuth.getInstance();
auth.createUserWithEmailAndPassword(email, password)
        .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
            @Override
            public void onSuccess(AuthResult authResult) {
                FirebaseUser user = authResult.getUser();
                user.updateProfile(new UserProfileChangeRequest.Builder()
                        .setDisplayName(name).build());
            }
        });

创建用户帐户后,将触发 firebase 功能。以下是我的代码:

// This happens in Firebase Cloud Functions (index.js)
exports.sendWelcomeEmail = functions.auth.user().onCreate((user) => {
    // send welcome email here
    console.log(user.displayName) // displayName is null here
});

我相信一旦创建帐户成功就会触发firebase函数,并且我在创建帐户后设置了用户的显示名称,因此displayName在函数中是null。我能做些什么来解决这个问题?我不想向电子邮件中没有姓名的用户发送电子邮件。

【问题讨论】:

  • 你在哪里打电话exports.sendWelcomeEmail = functions.auth.user().onCreate((user) =&gt; .. ? 你能发布你调用这个的类吗,你是否尝试在 OnSuccessListener 中调用它,问题可能是它们发生在不同的线程上并且 sendWelcomeEmail 发生在 createUserWithPassword 之前已经结束了。
  • @Mina 很抱歉造成混乱。第一个 sn-p 是我创建用户帐户的 Java Android 代码。第二个 sn-p 是 index.js 中的 JavaScript 代码,部署到 Firebase Cloud Functions

标签: java android firebase firebase-cloud-messaging


【解决方案1】:

tl;dr: displayName 在设置之前被调用。

onCreate 函数在前端完成 createUserWithEmailAndPassword 之后但在设置 displayName 之前运行。

您可以在更新 displayName 后运行 onCall 函数,或者按照 firebase github 线程上关于此问题的建议,您可以将配置文件参数添加到 createUserWithEmailAndPassword,以便我们使用预先填充的配置文件创建新帐户。

【讨论】:

    猜你喜欢
    • 2018-03-28
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 2016-10-02
    • 2014-04-06
    相关资源
    最近更新 更多