如何在此数据集中添加额外属性的电话号码和地址?似乎Firebase文档没有指定任何相关内容。
我已使用firebase.auth()
登录:
//Email Login
firebase.auth().signInWithEmailAndPassword(email, password).then(
ok => {
console.log("Logged in User",ok.user);
},
error => {
console.log("email/pass sign in error", error);
}
);
注册:
//Sign Up
firebase.auth().createUserWithEmailAndPassword(email, password).then(
ok => {
console.log("Register OK", ok);
},
error => {
console.log("Register error", error);
}
)
更新:
//User Authentication
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
$scope.data=user;
} else {
// No user, Redirect to login page
}
});
//Save Function
$scope.save=function(values){
$scope.data.updateProfile({
displayName: "Test User",
email: "test@gmail.com",
/* phone: 123412341,
address: "Temp Address",*/
photoURL: "www.example.com/profile/img.jpg"
}).then(function() {
// Update successful.
}, function(error) {
// An error happened.
});
};
答案 0 :(得分:4)
据我所知,如果您想拥有比Firebase提供的默认用户更多的字段,则必须自行管理用户个人资料。
您可以在Firebase中创建引用以保留所有用户个人资料。
users: {
"userID1": {
"name":"user 1",
"gender": "male"
},
"userID2": {
"name":"user 2",
"gender": "female"
}
}
您可以使用onAuthStateChanged
来检测用户何时登录,如果是,您可以使用once()
来检索用户的数据
firebaseRef.child('users').child(user.uid).once('value', callback)
希望有所帮助
答案 1 :(得分:0)
您可以编写一些代码,这些代码结合来自firebase auth和firestore文档的数据,并将其作为单个数据实体公开给应用程序。要获得订阅并通知整个应用程序已发生更改,最好使用Rxjs之类的事件库。在下面,我使用实现事件总线的simple library编写了以下示例。
// auth.js
import { publish } from '@joaomelo/bus'
import { fireauth, firestore } from './init-firebase.js'
const authState = {
userData: null
};
fireauth.onAuthStateChanged(user => {
if (!user) {
authState.userData = null;
publish('AUTH_STATE_CHANGED', { ...authState });
return;
}
// we must be carefull
// maybe this doc does not exists yet
const docRef = firestore
.collection('profiles')
.doc(user.uid);
docRef
// 'set' secures doc creation without
// affecting any preexisting data
.set({}, { merge: true })
.then(() => {
docRef.onSnapshot(doc => {
// the first data load
// and subsequent updates
// will trigger this
authState.userData = {
id: user.uid,
email: user.email,
...doc.data()
};
publish('AUTH_STATE_CHANGED', { ...authState });
});
});
});
// some-place-else.js
import { subscribe } from '@joaomelo/bus'
subscribe('AUTH_STATE_CHANGED',
authState => console.log(authState));
您可以在我写的post中对此进行详细说明,详细介绍该解决方案,并讨论如何更新这些属性。还有一个small library用可以检查的代码将答案与其他一些次要功能封装在一起。
答案 2 :(得分:0)
这可以通过在后端通过Admin SDK将每个用户的自定义数据作为“自定义声明”直接存储在Firebase Auth中来实现。
请注意,这不能完全在客户端完成,您的服务器(或者,如果您尚未设置服务器/ API,则可以根据链接指南使用Cloud Function)需要通过Admin SDK以使用admin.auth().setCustomUserClaims()
方法安全地设置数据:
https://firebase.google.com/docs/auth/admin/custom-claims#defining_roles_via_an_http_request