我已经在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 };
}
我将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);
});
}
});