我以前在android中开发过,我曾经使用过SharePreference来存储用户令牌。 ios和android有什么可用的原生作用吗?
答案 0 :(得分:10)
如果您使用create-react-native-app
或exp
,则可以使用Expo.SecureStore
存储令牌。
import {SecureStore} from 'expo';
await SecureStore.setItemAsync('secure_token','sahdkfjaskdflas$%^&');
const token = await SecureStore.getItemAsync('secure_token');
console.log(token); // output: sahdkfjaskdflas$%^&
答案 1 :(得分:6)
作为对其他答案的补充,您可能需要考虑在存储时加密用户设备上的令牌。
因此,除了通过AsyncStorage存储它之外,您可能还想使用类似:react-native-keychain的东西来加密它。
答案 2 :(得分:4)
您可能想要使用AsyncStorage
答案 3 :(得分:4)
以下是在React Native中存储持久数据的一些方法:
async-storage存储未加密的键值数据。不要使用异步存储来存储令牌,机密和其他机密数据。务必使用Async Storage来保持Redux状态,GraphQL状态并存储应用程序范围的全局变量。
react-native-keychain将用户名/密码组合以字符串格式存储在安全存储中。存储/访问时使用JSON.stringify / JSON.parse。
react-native-sensitive-info-对于iOS安全,但对Android使用Android共享首选项(默认情况下不安全)。但是,有fork)使用Android密钥库。
redux-persist-sensitive-storage-包装react-native-sensitive-info
答案 4 :(得分:1)
使用expo-secure-store
// to install it 'expo install expo-secure-store'
import * as SecureStore from 'expo-secure-store';
const setToken = async (token) => {
await SecureStore.setItemAsync('secure_token', token);
};
const getToken = async () => {
return await SecureStore.getItemAsync('secure_token');
};
setToken('#your_secret_token');
getToken().then(token => console.log(token)); // output '#your_secret_token'
答案 5 :(得分:0)
从React Native Expo尝试这个示例
注意:此示例用于未加密的使用,因此,如果您想要安全存储,请访问此页面获取有关nore信息https://docs.expo.io/versions/latest/sdk/securestore
参考: 未加密 https://reactnavigation.org/docs/en/auth-flow.html#set-up-our-navigators 加密的 https://docs.expo.io/versions/latest/sdk/securestore
class SignInScreen extends React.Component {
static navigationOptions = {
title: 'Please sign in',
};
render() {
return (
<View>
<Button title="Sign in!" onPress={this._signInAsync} />
</View>
);
}
_signInAsync = async () => {
await AsyncStorage.setItem('userToken', 'abc');
this.props.navigation.navigate('App');
};
}
class HomeScreen extends React.Component {
static navigationOptions = {
title: 'Welcome to the app!',
};
render() {
return (
<View>
<Button title="Show me more of the app" onPress={this._showMoreApp} />
<Button title="Actually, sign me out :)" onPress={this._signOutAsync} />
</View>
);
}
_showMoreApp = () => {
this.props.navigation.navigate('Other');
};
_signOutAsync = async () => {
await AsyncStorage.clear();
this.props.navigation.navigate('Auth');
};
}
// More code like OtherScreen omitted for brevity