为什么 Firebase 的“getRedirectResults()”返回“{user: null}”?

IT技术 javascript reactjs firebase firebase-authentication
2021-05-16 11:59:01

目前,当用户通过 Social auth(通过重定向)时,它成功地在Firebase Authentication下创建了一个用户,但无法检索 Google/Facebook API 的数据。对身份验证成功时无法检索数据的情况感到困惑。

我曾经只有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;
  });
}

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

login successful! Data is:
{user: null}

我没有偏离官方文档示例,这就是我感到困惑的原因。

2个回答

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

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

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

如果没有用户登录的usernull

现场示例:

checkAuthStatus(){
        firebase.auth().onAuthStateChanged(user => {
            this.setState({ btnWithImg: user });

            if(user !== null){
                this.setState({ userIsLoggedIn: true });
                this.props.toggleLogIn();
            }
        });
    }

您应该firebase.auth().getRedirectResult()仅在用户通过身份验证后调用例子

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