Javascript 使用firebase(React)将用户数据添加到数据库(谷歌认证)
我正在尝试在登录时将用户数据添加到Firebase数据库。用户显示在身份验证中,但没有数据发布到实际数据库Javascript 使用firebase(React)将用户数据添加到数据库(谷歌认证),javascript,reactjs,firebase,firebase-realtime-database,firebase-authentication,Javascript,Reactjs,Firebase,Firebase Realtime Database,Firebase Authentication,我正在尝试在登录时将用户数据添加到Firebase数据库。用户显示在身份验证中,但没有数据发布到实际数据库 import firebase from 'firebase'; const config = { apiKey: "", authDomain: "", databaseURL: "", }; firebase.initializeApp(config); const signIn = () => { var provider = new firebase.a
import firebase from 'firebase';
const config = {
apiKey: "",
authDomain: "",
databaseURL: "",
};
firebase.initializeApp(config);
const signIn = () => {
var provider = new firebase.auth.GoogleAuthProvider();
var promise = firebase.auth().signInWithRedirect(provider)
promise.then( result => {
var user = result.user;
firebase.database().ref('users/'+user.uid).set({
email: user.email,
name: user.displayName
})
}).catch( e => {
//handle errors
});
firebase.auth.signInWithRedirectprovider将页面重定向到OAuth提供程序,然后返回到当前页面。 要获取结果并保存用户,您需要调用:
firebase.auth().getRedirectResult().then(result => {
var user = result.user;
if (user) {
// Save user.
}
}).catch(e => {
});
应该在哪里调用getRedirectResult?它是否应位于signInWithRedirect调用下的signIn属性中?除Cordova应用程序外,getRedirectResult应位于signInWithRedirect之外。后者将重定向页面,因此在调用时无法获取结果。我的意思是getRedirectResult应该在同一个signIn方法中,还是应该在组件的其他位置(例如,componentDidMount方法)中?它不应该在signIn方法中。它最好放在组件底座上。请记住,在用户登录且不是来自重定向操作后,应改用onAuthStateChanged。getRedirectResult提供了一种获取通常可以通过signInWithPopup获得的其他信息的方法,例如操作类型、其他用户信息、凭据、操作中可能出现的错误,等等。如果不需要,那么onAuthStateChanged就足以确定当前的身份验证状态。缺点是,如果signInWithRedirect中发生错误,您将无法获取该错误。当onAuthStateChanged中没有用户时,可以嵌入getRedirectResult,以检查登录操作中是否发生错误。