我在理解最好的注销用户(例如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提供了各种文档,说明如何保持用户登录以及如何刷新令牌,但是关于强制令牌过期的内容不多。
我将竭尽所能!提前致谢。 :)
答案 0 :(得分:0)
aws-amplify
对我的回答后,得到了我的答案。这不是当前功能,但是现在有一个功能请求(GitHub issue)。
这是通过aws-amplify直接给出的答案:
Amplify将用户的jwt令牌存储在缓存中。我们目前 仅使用signOut作为使这些令牌过期并将其从中删除的方法 缓存。您可能有一个不活动的计数器,然后以以下方式调用signOut 一旦达到限制。没有其他方法可以使用Amplify 到现在为止使这些令牌过期。
希望对以后的人有所帮助!