【发布时间】:2020-04-07 14:24:58
【问题描述】:
我正在考虑在 React Native 应用程序中存储用户访问令牌。最初我一直在看 Redux,但我注意到 RN 有 AsyncStorage,现在我假设在 IOS 的情况下这相当于 NSUserDefaults。我可能错了。
这是存储访问令牌的好方法吗?如果我可以帮助它进行简单的数据存储,我真的不想经历使用 Redux 的过程。
【问题讨论】:
标签: reactjs react-native
我正在考虑在 React Native 应用程序中存储用户访问令牌。最初我一直在看 Redux,但我注意到 RN 有 AsyncStorage,现在我假设在 IOS 的情况下这相当于 NSUserDefaults。我可能错了。
这是存储访问令牌的好方法吗?如果我可以帮助它进行简单的数据存储,我真的不想经历使用 Redux 的过程。
【问题讨论】:
标签: reactjs react-native
AsyncStorage 可能不是好的解决方案,取决于您的服务器如何处理您的请求。
但是您可以使用 Redux 和 Redux-persist,使用转换参数可以加密您的数据,
https://github.com/rt2zz/redux-persist#transforms
密钥加密:https://github.com/maxdeviant/redux-persist-transform-encrypt
您仍将使用 AsyncStorage,但这次使用加密层来保护您的数据
【讨论】:
Redux 是关于数据流控制的。不一定是长期储存。如果你想持久化 redux 数据,你最终会使用 AsyncStorage 来做到这一点。
AsyncStorage 在未越狱的 iOS 设备上被沙盒化。但是,数据并未以任何方式加密。
对于这两个平台更安全的解决方案似乎是https://github.com/pradeep1991singh/react-native-secure-key-store
【讨论】:
AsyncStorage 对于敏感信息不安全。阅读更多here
在您的用例中,最好使用 Firebase 服务来获取令牌。 当应用启动时,您可以执行类似的操作
var auth = firebase.auth().onAuthStateChanged(function(user) {
if (user) {
user.getIdToken().then(function(data) {
console.log(data)
// Save it redux, or component state(in that case you need to do this in every component where token will be used
// Unsubscribe from listener
auth()
});
} else {
// User is not authenticated
// Unsubscribe from listener
auth()
}
});
【讨论】:
这是安全的。另外,如果我没记错的话(不要在以下任何内容中引用我的话),您也许可以使用它让用户能够在该设备上登录到相同的应用程序/webapp;或其他设备。我还认为您可以与您开发的其他应用共享登录详细信息,前提是这些应用在捆绑标识符中具有相同的域。
【讨论】: