Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用firebase(React)将用户数据添加到数据库(谷歌认证)_Javascript_Reactjs_Firebase_Firebase Realtime Database_Firebase Authentication - Fatal编程技术网

Javascript 使用firebase(React)将用户数据添加到数据库(谷歌认证)

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

我正在尝试在登录时将用户数据添加到Firebase数据库。用户显示在身份验证中,但没有数据发布到实际数据库

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,以检查登录操作中是否发生错误。