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); 
    });