0

我使用火力地堡与数据库,认证和云功能模块的Android应用程序。当用户创建通过应用程序配置文件,并设置用户全名, 的火力地堡auth.user API云功能有空DisplayName属性

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    // user signed in 
    String displayName = user.getDisplayName(); 
    // do whatever with displayName... 
} else { 
    // .... 
} 

值如预期相当多 - 无论用户放在

我也有一个云功能。这为新用户创建一个数据库记录:

const functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 

exports.createUserRecord = functions.auth.user().onCreate(function(event) { 
    const user = event.data; 
    const userName = user.displayName || 'Anonymous'; 
    const userSignedUp = (new Date()).toJSON(); 
    console.log('A new user signed up: ', user.uid, userName, userSignedUp); 
    return admin.database().ref('users').push({ 
     name: `${userName}`, 
     email: `${user.email}`, 
     ref: `${user.uid}`, 
     signup: `${userSignedUp}` 
    }); 
}); 

这个作品大多确定,但双方的日志条目,并在数据库列表Anonymous名称值所产生的记录。

谁能请告诉我在哪里,我这个问题呢?谢谢。

最好的问候,

〜托多尔

UPDATE

忘了提,用户与电子邮件/密码提供者创建。

+0

对于我来说,一切看起来都正确。我发现该问题[0]与Firebase中的Google登录相关。也许这是真的给你的?您是否使用Google创建用户? [0] https://github.com/firebase/quickstart-js/issues/19 – StefMa

+0

在Android上,当我创建一个电子邮件/密码的用户,'displayName'为空。你期待它被定义吗?来源是什么? –

+0

我正在使用Android __Firebase UI__进行登录,并在我的应用程序中注册 - 当我在第一次登录时创建帐户时,有一个用于完整用户名的“TextBox”。价值来自那里。这个名字是正确保存在哪里火力地堡验证是节约登录,请通过应用程序代码证明生产_“欢迎回来,!” _'Toast'在随后每次登录......只有云的功能是没有看到这个产权:-( –

回答

3

在FirebaseUI,通过电子邮件/密码的用户创建两个步骤完成:用户正在使用的地址和密码创建的,则用户配置文件与输入的用户名更新。这可以在FirebaseUI RegisterEmailFragment中看到。

目前,Cloud Functions只提供trigger for user creation,您正在使用的那个,functions.auth.user().onCreate()。用户配置文件更新没有触发器。触发器在用户创建时触发。事件数据包含当前存在的用户配置文件,然后用用户名更新。

您将需要使用一些其他的手段来获取用户名。一种选择是使用数据库事件触发配置文件更新后的retrieve the user data功能:

admin.auth().getUser(uid) 
    .then(function(userRecord) { 
    // See the UserRecord reference doc for the contents of userRecord. 
    console.log("Successfully fetched user data:", userRecord.toJSON()); 
    }) 
    .catch(function(error) { 
    console.log("Error fetching user data:", error); 
    });