下面是一種方法,當用戶在表單中輸入他們的資訊并單擊提交時,它使用他們的電子郵件和密碼注冊用戶并在 Firebase 中創建一個檔案:
const onSubmitHandler = async (e) => {
e.preventDefault();
try {
const { user } = await createAuthUserWithEmailAndPassword(email, password);
console.log(user, 'user')
await createUserDocumentFromAuth(user, { displayName })
}catch(err) {
if(err === 'auth/email-already-in-use') {
alert('Account with this email already exists');
return;
}else {
console.log(err)
}
}
}
對于此函式呼叫:
await createUserDocumentFromAuth(user, { displayName })
wheredisplayName可以是字串,例如ElonMusk. 實際上createUserDocumentFromAuth,我正在呼叫 setDoc 方法,該方法是 Firebase 中用于設定用戶檔案的方法:
export const createUserDocumentFromAuth = async ( userAuth, additionalInfo = {} ) => {
if(!userAuth) return;
console.log(additionalInfo, 'additionalInfo')
const userDocRef = doc(db, 'users', userAuth.uid);
const userSnapshot = await getDoc(userDocRef);
if(!userSnapshot.exists()) {
const { displayName, email } = userAuth;
const createdAt = new Date();
try {
// set the doc here
await setDoc(userDocRef, {
displayName,
email,
createdAt,
...additionalInfo
});
} catch(err) {
console.log('err creating the user', err)
}
};
return userDocRef;
}
我手動傳入的原因{ displayName }是因為有一種情況,服務器的回應createAuthUserWithEmailAndPassword(email, password)必須displayName是null,但我們希望用戶在資料庫中注冊一個 displayName。
我的問題是:
- 為什么
displayName只有當它作為物件而不只是以其正常形式傳入時才有效?例如:
await createUserDocumentFromAuth(user, { displayName })
將替換displayName: null
但不是當我傳入時:
await createUserDocumentFromAuth(user, displayName)
- 這種技術在 JavaScript 中叫什么?
uj5u.com熱心網友回復:
如果您查看createUserDocumentFromAuth,您會發現它需要兩個引數userAuth,并且additionalInfo,這兩個引數都應該是物件。
它稍后在呼叫方法時使用資料additionalInfo來添加/覆寫任何內容。userAuthsetDoc()
所以,我建議添加
console.log(userDocRef, {
displayName,
email,
createdAt,
...additionalInfo
});
查看正在發送哪些資料setDoc()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/484828.html
標籤:javascript 火力基地 功能 目的 参数
