firebase - Firestore 未将用户数据写入数据库
问题描述
我正在尝试在注册期间使用FirebaseUI Web
Vue.js将用户数据加载到 Firestore。该帐户是在 Firebase 端创建的。但是,数据库没有被填充 - 我没有收到任何错误,但alert('Signed in as ' + displayName);
确实显示了正确的信息并且用户已登录。
更新:我通过在 and 之外创建一个函数来重构代码,callbacks
以反映错误处理 - 问题没有变化(没有错误 && 没有写入)。
firbaseui-config.js:
import firebase from 'firebase';
import firebaseui from 'firebaseui'
import { accountsCollection } from '@/services/registerFirebase'
export const FBuiConfig = {
signInSuccessUrl: '/dashboard',
signInFlow: 'popup',
callbacks: {
signInSuccessWithAuthResult: function(authResult) {
addUser(authResult);
return false;
},
uiShown: function() {
document.getElementById('app-drawer').style.display = 'none';
document.getElementById( 'app-toolbar').style.display = 'none';
},
},
signInOptions: [
firebase.auth.GoogleAuthProvider.PROVIDER_ID,
{
provider: firebase.auth.EmailAuthProvider.PROVIDER_ID,
requireDisplayName: true,
forceSameDevice: true,
},
firebaseui.auth.AnonymousAuthProvider.PROVIDER_ID,
],
tosUrl: '/tos',
privacyPolicyUrl: function() {
window.location.assign('/pp');
}
};
function addUser(authResult) {
const user = authResult.user;
const userUid = user.uid;
const displayName = user.displayName;
const account = {
useruid: userUid,
calendarEvents: []
}
accountsCollection.doc(userUid).set(account)
.then(function (docRef) {
console.log('Document written with ID: ', docRef.id)
})
.catch(function (error) {
var errorCode = error.code;
var errorMessage = error.message;
alert.error(
'Error adding document: ', errorCode + ': ' + errorMessage
)
})
alert('Signed in as ' + displayName); // <-- WORKS!
}
解决方案
非常感谢@RenaudTarnec。数据正在返回null
,不幸的是 Auth 提供者在发生这种情况时没有返回任何错误。
通过在帮助解决之前使用所需的返回数据创建日志。fb.usersCollection.doc(account.userUid).set(account)
Bellow 是最后一个工作示例。
import firebase from 'firebase'
import firebaseui from 'firebaseui'
const fb = require('@/services/firebaseInit')
export var uiConfig = {
signInSuccessUrl: '/dashboard',
signInFlow: 'popup',
callbacks: {
signInSuccessWithAuthResult: function(authResult) {
const newUser = authResult.user
const account = {
avatar : newUser.photoURL,
eMail : newUser.email,
userName : newUser.displayName,
userUid : newUser.uid,
accountHolder: []
}
console.log(
'New user: '+ account.userName + '\n' +
'with id: ' + account.userUid + '\n' +
'email: ' + account.eMail + '\n' +
'avatar: ' + account.avatar
)
fb.usersCollection.doc(account.userUid).set(account)
.then(() => {
console.log('New user account with ID:' + account.userUid + ' created');
})
.catch(err => {
console.log(err)
this.errorMsg = err.message
})
alert('Hello ' + account.userName + ', welcome to Firestore!');
return false;
}
},
signInOptions: [
firebase.auth.GoogleAuthProvider.PROVIDER_ID,
{
provider: firebase.auth.EmailAuthProvider.PROVIDER_ID,
requireDisplayName: true,
},
firebaseui.auth.AnonymousAuthProvider.PROVIDER_ID,
],
};
推荐阅读
- excel - 移动由宏创建的文件
- xml - XSLT 使用内部结构的单个实例创建源消息的副本
- r - ggplot2-不知道如何摆脱交互式绘图上的线条
- javascript - 粘贴超过最大长度的字符后,jQuery 更新字符计数器
- php - Eloquent 模型比较麻烦
- html - HTML:输入 YouTube 视频嵌入链接不起作用
- javascript - 在html中查看word文档/pdf,目前使用Angular
- c++ - 头文件中的字符串视图文字
- javascript - 无法在浏览器调试器控制台(React JS)中使用 OpenLayers 库
- google-apps-script - 当我调用 DriveApp.createFile(image) 保存的图像已损坏