【发布时间】:2020-08-05 01:33:17
【问题描述】:
我正在尝试在我的 react 项目中集成 firebase 登录,同时将 idtoken 传递到 Axios 拦截器以供 API 使用。
但我注意到我的 idtoken 已过期,并且相同的旧令牌被传递到我的 API。
如何刷新令牌并将新令牌传递到我的 Axios 拦截器?
以下是我的代码:
import React, { Component } from "react";
import Navigation from "./Navigation";
import firebase from "./firebaseApp";
import axios from "axios";
import "./index.css";
class App extends Component {
state = {
authenticated: undefined,
};
componentDidMount() {
firebase.auth().onAuthStateChanged((authenticated) => {
if (authenticated) {
let idTokenfinal;
firebase
.auth()
.currentUser.getIdToken()
.then((idToken) => {
idTokenfinal = idToken;
this.setState({
authenticated: true,
});
})
.catch((e) => {
alert(e);
});
firebase.auth().onIdTokenChanged(function (user) {
if (user) {
// User is signed in or token was refreshed.
user.getIdToken().then((idToken) => {
idTokenfinal = idToken;
});
}
});
axios.interceptors.request.use(
(config) => {
if (config.data && config.data.authToken) {
config.data.authToken = idTokenfinal;
}
return Promise.resolve(config);
},
function (error) {
// Do something with request error
return Promise.reject(error);
}
);
} else {
this.setState({
authenticated: false,
});
}
});
}
render() {
return this.state.authenticated !== undefined &&
this.state.authenticated !== null ? (
<Navigation authenticated={this.state.authenticated} />
) : (
<div className="loader"></div>
);
}
}
export default App;
【问题讨论】:
标签: javascript reactjs firebase firebase-authentication