【问题标题】:Why is Firebase's "getRedirectResults()" returning "{user: null}"?为什么 Firebase 的“getRedirectResults()”返回“{user: null}”?
【发布时间】:2019-05-21 15:58:10
【问题描述】:

目前,当用户通过社交身份验证(通过重定向)时,它会在 Firebase 身份验证 下成功创建用户,但无法检索 Google/Facebook API 的数据。对 Auth 成功时如何无法检索数据感到困惑。

我以前只有 SignInWithPopup(它工作得很好),但我试图让 getRedirectResults 也能工作(对于移动设备)。

鉴于我所看到的行为,问题很可能出在 getRedirectResults 上。很可能不是社交 API 设置,否则用户将永远不会在身份验证中创建。

以下代码位于 componentDidMount(这是一个 React.js 应用程序)中:

if (this.state.device === 'mobile') {
  firebase.auth().getRedirectResult().then(function(result) {
    console.log('login successful! Data is:');
    console.log(result);

    if (result.credential) {
      var provider = result.credential.providerId;
      self.handleSocialAuth(provider, result);
    }
  }).catch(function(error) {
    var errorCode = error.code;
    var errorMessage = error.message;
  });
}

results 应该包含用户的数据,不断返回:

login successful! Data is:
{user: null}

我没有偏离official docs examples,所以我很困惑。

【问题讨论】:

  • 这是发生在移动设备、浏览器还是两者上?

标签: javascript reactjs firebase firebase-authentication


【解决方案1】:

只有在用户通过身份验证后,您才应该调用firebase.auth().getRedirectResult()。示例

firebase.auth().onAuthStateChanged(user => {
  if (user) {
    const result = await firebase.auth().getRedirectResult();
    assert(result.user, 'user is empty')
  }
});

【讨论】:

    【解决方案2】:

    firebase.auth().getRedirectResult() - 在页面加载后调用。 官方文档链接:https://firebase.google.com/docs/auth/web/google-signin

    使用以下方法检索已登录的用户。

    firebase.auth().onAuthStateChanged(function(user) {
              console.log(user);
    });
    

    如果没有用户登录,user 将是 null

    活生生的例子:

    checkAuthStatus(){
            firebase.auth().onAuthStateChanged(user => {
                this.setState({ btnWithImg: user });
    
                if(user !== null){
                    this.setState({ userIsLoggedIn: true });
                    this.props.toggleLogIn();
                }
            });
        }
    

    【讨论】:

    • 这个答案对 OP 的问题没有任何帮助
    • @KuraiBankusu,再次阅读问题。用getRedirectResults()登录后,他试图获取登录的用户,但结果为null。如果你使用我放在上面的方法,如果认证成功,结果不会为空。
    • 这是对 OP 问题的有用答案。有完全相同的问题,它解决了。谢谢塞尔吉乌。
    • 除了 onAuthStateChanged 在每次登录/注销时触发。 getRedirectResults() 的目的是能够在新用户注册时编写初始化逻辑(正如它在文档中明确指出的那样)。对我来说也是空的。
    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2016-05-11
    • 2018-02-18
    • 2021-07-28
    • 2023-02-04
    • 1970-01-01
    相关资源
    最近更新 更多