我有一个相当简单的React原生/ Redux应用程序,最近添加了Redux持久化和AsyncStorage,以帮助在重新加载时保留状态。
然而,我在让Firebase重新验证用户身份时遇到了问题。我想知道是否有人有经验,因为我对Redux和Firebase都很陌生。更明确地说,我希望用户登录一次,然后不必每次打开应用程序时都再次登录。
我的登录用户操作:
export const loginUser = ({ email, password }) => {
return (dispatch) => {
dispatch({ type: LOGIN_USER });
firebase.auth().signInWithEmailAndPassword(email, password)
.then(user => loginUserSuccess(dispatch, user))
.catch(() => {
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(user => loginUserSuccess(dispatch, user))
.catch(() => loginUserFail(dispatch));
});
};
};
我的应用js:
class App extends Component {
constructor() {
super();
this.state = {
rehydrated: false,
store
};
}
componentDidMount() {
const persistor = persistStore(
store,
{
storage: AsyncStorage,
whitelist: ['auth']
},
() => { this.setState({ rehydrated: true }); }
);
AppState.addEventListener('change', () => this.handleAppLoaded(AppState.currentState));
const firebase_config = {
apiKey: Config.FIREBASE_API_KEY,
authDomain: `${Config.FIREBASE_PROJECT_NAME}.firebaseapp.com`,
databaseURL: `https://${Config.FIREBASE_PROJECT_NAME}.firebaseio.com`,
storageBucket: `${Config.FIREBASE_PROJECT_NAME}.appspot.com`,
messagingSenderId: Config.FIREBASE_MESSAGE_ID
};
firebase.initializeApp(firebase_config);
}
componentWillUnmount() {
AppState.removeEventListener('change', () => this.handleAppLoaded(AppState.currentState));
}
handleAppLoaded(state) {
if (state === 'active') {
store.dispatch(renewToken(store.getState()));
}
return null;
}
render() {
if (!this.state.rehydrated)
return null;
this.handleAppLoaded(AppState.currentState);
return (
<Provider store={store}>
<RouterWithRedux />
</Provider>
);
}
}
export default App;
有人能给我指出正确的方向吗?我试着做了一个reauthUser动作,但是被卡住了,因为我找不到一个方法来重新验证用户,因为Auth对象不保存密码(显然是出于安全原因)
1条答案
按热度按时间r9f1avp51#
您使用的是web SDK吗?如果是,那么首先您需要使用此SDK而不是https://github.com/invertase/react-native-firebase
这些库用于具有本机支持的React Native项目。
如果您已经在使用它,可以在https://rnfirebase.io/docs/v3.2.x/auth/reference/auth中查看API
设置所有的
onUserChanged
,onAuthStateChanged
等,然后你的应用程序应该没有问题,重新验证的东西。