【问题标题】:Add user data to database with firebase (React) (Google authentication)使用 firebase (React) 将用户数据添加到数据库(Google 身份验证)
【发布时间】:2017-05-16 23:01:34
【问题描述】:

我正在尝试在登录时将用户数据添加到 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

  });

【问题讨论】:

    标签: javascript reactjs firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

    firebase.auth().signInWithRedirect(provider) 会将页面重定向到 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() 方法中。最好放在componentDidMount()。请记住,在用户登录并且不是来自重定向操作后,应该使用onAuthStateChanged
    • getRedirectResult 提供了一种获取其他信息的方法,您通常可以通过signInWithPopup 获得,例如操作类型、其他用户信息、凭据、操作中可能出现的错误等。如果您不这样做不需要,那么onAuthStateChanged 足以确定当前的身份验证状态。不利的一面是,如果signInWithRedirect 中发生错误,您将无法得到它。当onAuthStateChanged中没有用户时,可以嵌入getRedirectResult来检查登录操作是否出错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2019-09-27
    • 2020-01-27
    • 2021-08-12
    • 2017-04-28
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多