仅在Google身份验证回调后才运行保存用户功能

问题描述 投票:0回答:1

我已经在React + Firebase中建立了一个google身份验证。我成功地添加了此功能,但当前每次他们回到家时都会调用firebase.auth().getRedirectResult()。我想称此仅在Google身份验证回调之后

class Home extends Component {
  constructor(props) {
    super(props);

    this.state = {
      user: null
    };
  }

  async componentWillMount() {
    firebase.auth().onAuthStateChanged(user => {
      this.setState({ user });

      if (user) {
        this.props.history.push("/user/settings");
      }
    });

    // Want to call this only after google authentication callback
    firebase
      .auth()
      .getRedirectResult()
      .then(result => {
        if (result.credential) {
          var token = result.credential.accessToken;
          console.log("token", token);
        }
        var user = result.user;
        this.props.createUser(user);
      })
      .catch(function(error) {
        console.log("error", error);
      });

  onLogin = () => {
    const provider = new firebase.auth.GoogleAuthProvider();
    firebase.auth().signInWithRedirect(provider);
  };

  render() {
    return (
   // Signin with Google
      <button className="btn btnPrimary" onClick={this.onLogin}>
        <span>Google Signin</span>
      </button>
    );
  }
}

function mapStateToProps({ user }) {
  return { user: user };
}
javascript reactjs firebase firebase-authentication
1个回答
0
投票

我将firebase.auth().getRedirectResult()设置为if (user) { }

像这样:

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

      if (user) {
        this.props.history.push("/user/settings");
    firebase
      .auth()
      .getRedirectResult()
      .then(result => {
        if (result.credential) {
          var token = result.credential.accessToken;
          console.log("token", token);
        }
        var user = result.user;
        this.props.createUser(user);
      })
      .catch(function(error) {
        console.log("error", error);
      });
      }
    });
© www.soinside.com 2019 - 2024. All rights reserved.