使用React Native / Redux和Firebase实现持久身份验证

p8h8hvxi  于 2023-01-30  发布在  React
关注(0)|答案(1)|浏览(173)

我有一个相当简单的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对象不保存密码(显然是出于安全原因)

r9f1avp5

r9f1avp51#

您使用的是web SDK吗?如果是,那么首先您需要使用此SDK而不是https://github.com/invertase/react-native-firebase
这些库用于具有本机支持的React Native项目。
如果您已经在使用它,可以在https://rnfirebase.io/docs/v3.2.x/auth/reference/auth中查看API
设置所有的onUserChangedonAuthStateChanged等,然后你的应用程序应该没有问题,重新验证的东西。

相关问题