在React Native(Expo)中闲置后无法注销用户并进行放大

时间:2018-10-24 00:02:09

标签: react-native authentication expo aws-amplify

我在理解最好的注销用户(例如5分钟或x闲置时间)后的最佳方式时遇到了麻烦。我已经看到了很多hacky解决方案和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 :(得分:0)

aws-amplify对我的回答后,得到了我的答案。这不是当前功能,但是现在有一个功能请求(GitHub issue)。

这是通过aws-amplify直接给出的答案:

  

Amplify将用户的jwt令牌存储在缓存中。我们目前   仅使用signOut作为使这些令牌过期并将其从中删除的方法   缓存。您可能有一个不活动的计数器,然后以以下方式调用signOut   一旦达到限制。没有其他方法可以使用Amplify   到现在为止使这些令牌过期。

希望对以后的人有所帮助!