Проблемы с выходом пользователя из строя после неактивности в React Native (Expo) и Amplify - PullRequest
0 голосов
/ 24 октября 2018

У меня возникли проблемы с пониманием лучшего способа выхода пользователя из системы, например, через 5 минут или x период бездействия.Я видел много хакерских решений и пакетов npm, но я бы предпочел сделать это правильно и эффективно, не добавляя никаких дополнительных пакетов.

Вот некоторые из связанных зависимостей, которые я использую в package.json:

   "aws-amplify": "^1.1.6",
   "aws-amplify-react": "^2.0.5",
   "aws-amplify-react-native": "^2.0.1",
   "expo": "^30.0.0",
   "react-native": "^0.55.0",
   "react-navigation": "^2.13.0",
   "react-redux": "^5.0.7",
   "redux": "^4.0.0",
   "redux-promise": "^0.6.0"

Вот мой App.js файл:

import React, { Component } from 'react'
import { Provider } from 'react-redux'
import { createStore, applyMiddleware } from 'redux'
import { Font, Asset, AppLoading } from 'expo'
import ReduxPromise from 'redux-promise'
import Amplify from 'aws-amplify'
import AppNavigator from './AppNavigator'
import reducers from './src/reducers'
import awsExports from './src/aws-exports'

Amplify.configure(awsExports)
const createStoreWithMiddleware = applyMiddleware(ReduxPromise)(createStore);

class App extends Component {
  constructor(props) {
    super(props)
    this.state = {
      fontLoaded: false,
      isReady: false,
    }
  }

  async componentDidMount() {
    await Font.loadAsync({
      'NunitoSans-Bold': require('./src/assets/fonts/NunitoSans-Bold.ttf'),
      'NunitoSans-Regular': require('./src/assets/fonts/NunitoSans-Regular.ttf'),
      'NunitoSans-SemiBold': require('./src/assets/fonts/NunitoSans-SemiBold.ttf'),
    })
    this.setState({ fontLoaded: true })
  }

  cacheResourcesAsync = async () => {
    const images = [
      require('./assets/fav.png'),
      require('./assets/splash.png'),
    ]

    const cacheImages = images.map(image => ( Asset.fromModule(image).downloadAsync()))
    return Promise.all(cacheImages)
  }

  render() {
    const store = createStoreWithMiddleware(reducers)
    return (
      this.state.fontLoaded && this.state.isReady ? (
          <Provider store={ store }>
              <AppNavigator />
          </Provider>
      ) : (
          <AppLoading
            startAsync={ this.cacheResourcesAsync }
            onFinish={ () => this.setState({ isReady: true }) }
            onError={ console.warn }
          />
      )
    )
  }
}

export default App

В настройках учетной записи, У меня есть успешная функция выхода из системы, которую я хотел бы использовать после выхода пользователя из системы.

  handleSignOut = () => {
    cognitoSignOut()
      .then(() => {
        AsyncStorage.clear()
        this.navigate('Auth')
      })
      .catch(err => this.setState({ errorMessage: err.message }))
  }

Полагаю, самая большая путаница для меня заключается в том, что в Amplify есть все виды документации о том, как сохранить пользователя в системе и как обновить токен, но не так много, чтобы заставить токен истечь.

Мне бы очень хотелось получить любую помощь!Заранее спасибо.:)

1 Ответ

0 голосов
/ 29 октября 2018

Получил мой ответ после того, как aws-amplify ответил мне.Это не текущая функция, но теперь есть запрос функции ( выпуск GitHub ).

Вот прямой ответ через aws-ampify:

Amplify хранит токены jwt для пользователя в кеше.В настоящее время мы используем signOut только для того, чтобы истечь эти токены и удалить их из кэша.Вы можете иметь счетчик неактивности, а затем вызвать signOut, как только будет достигнут предел.Нет другого способа использовать Amplify для истечения срока действия этих токенов.

Надеюсь, что это поможет кому-то в будущем!

...