2017-11-25 152 views
1

所以,我有這個ReactJS應用程序,有一個用戶數據庫,火力地堡user.updateProfile({...})不工作作出反應應用

用於創建用戶的功能是本

import { ref, firebaseAuth } from './../Components/config' 

export function auth (email, pw) { 
    return firebaseAuth().createUserWithEmailAndPassword(email, pw) 
    .then(saveUser) 
} 
export function saveUser (user) { 
    return ref.child(`users/${user.uid}/info`) 
    .set({ 
     email: user.email, 
     uid: user.uid, 
     number: "" //custom 
    }) 
    .then(() => user) 
} 

正如你看到的用戶是由3個屬性,電子郵件,UID,和最初是「」自定義數字屬性,

我有一個

changeNumberToNew = (n) =>{ 
    var user = firebase.auth().currentUser; 
     if (user != null) { 
      user.updateProfile({ 
      number: n 
      }).then(() => { 
      console.log("Number changer"); 
      }).catch((error) => { 
      console.log(error); 
      }); 
     } else { 
     console.log("No user") 
     } 
    }; 

和一個按鈕來調用函數

<button onClick={this.changeNumberToNew(4)}>Click to change number</button> 

當我點擊按鈕的承諾是分解導致的

console.log("Number changer") 

執行,但是當我去看看火力數據庫對象..沒有什麼變化,即使重裝和等待仍然沒有任何變化

+1

[Firebase v3 updateProfile方法]的可能重複(https://stackoverflow.com/questions/38559457/firebase-v3-updateprofile-method) –

回答

0

我認爲這裏的問題是你的數據庫中的用戶對象與認證模塊中的用戶混淆。他們不一樣。

當您在第一個塊中表示以下內容時,可以將用戶的「副本」保存到數據庫中。

ref.child(`users/${user.uid}/info`) 
    .set({ 
     email: user.email, 
     uid: user.uid, 
     number: "" 
    }) 

然後在第二個代碼塊中,嘗試更新認證模塊中的當前用戶。不好。你應該更新你的數據庫,而不是你的認證模塊。

var user = firebase.**auth()**.currentUser 

if (user != null) { 
    user.updateProfile({...}) 
} 

我不認爲你可以在認證模塊中的當前用戶創建一個自定義字段。 updateProfile()用於更新默認情況下從提供者處獲得的字段,例如電子郵件,顯示名稱,photoURL等。您無法創建新字段。

您應該在您的數據庫中更新用戶的副本,然後在需要「號碼」值時引用該副本。

您更改功能也許應該更喜歡......

changeNumberToNew = (n) => { 
    var user = firebase.auth().currentUser; 
    if (user) { 
    ref.child(`users/${user.uid}/info`).update({number: n}) 
    .then(() => console.log("Number changer")) 
    .catch(error => console.log(error)) 
    } else { 
     console.log("No user") 
    } 
}