我已经使用asyncstorage
进行登录和注销。但是它不起作用,当我打开应用程序时,它总是显示登录屏幕。请查看我的代码,
// LoginFirst.tsx
let userID = response.data.details[0].id.toString();
let userName = response.data.details[0].username.toString();
let email = response.data.details[0].email.toString();
let accountType = response.data.details[0].account_type.toString();
let eventID = response.data.details[0].event_id;
eventID = (eventID === null) ? 0 : eventID.toString();
SetUserStorage.setUserDetails('userLoginStatus', 1);
SetUserStorage.setUserDetails('userId', userID);
SetUserStorage.setUserDetails('userName', userName);
SetUserStorage.setUserDetails('userEmail', email);
SetUserStorage.setUserDetails('userAccountType', accountType);
SetUserStorage.setUserDetails('userEventID', eventID);
this.props.navigation.navigate('Home');
// GetUserStorage.tsx
import { AsyncStorage } from 'react-native';
export const getUserDetails = async (sessionValue) => {
let userSession = '';
try {
userSession = await AsyncStorage.getItem(sessionValue) || 0;
} catch (error) {
// Error retrieving data
console.log(error.message);
}
return userSession;
}
// SetUserStorage.tsx
import { AsyncStorage } from 'react-native';
export const setUserDetails = async (sessionType, sessionValue) => {
try {
await AsyncStorage.setItem(sessionType, sessionValue);
} catch (error) {
// Error retrieving data
console.log(error.message);
}
}
// ClearUserStorage.tsx
import { AsyncStorage } from 'react-native';
export const clearAllStorage = async () => {
try {
await AsyncStorage.clear();
return 1;
} catch (error) {
// Error retrieving data
console.log(error.message);
return 0;
}
}
// Splash.tsx
export default class Splash extends Component {
async componentDidMount() {
let routeNames = 'LoginFirst';
const isLogin = await AsyncStorage.getItem('userLoginStatus');
setTimeout(() => {
this.setState({ isLoading: false });
const { navigate } = this.props.navigation;
if (isLogin !== null || isLogin === 'true') {
routeNames = 'Home';
} else {
routeNames = 'LoginFirst';
}
// navigate(routeNames);
const resetAction = StackActions.reset({
index: 0,
actions: [NavigationActions.navigate({ routeName: routeNames })]
});
this.props.navigation.dispatch(resetAction);
}, 2000);
}
render() {
return (
<View style={styles.container}>
<Image
style={styles.logo}
source={require('../../../assets/logo.png')}
/>
</View>
);
}
}
// Logout.tsx
logoutBtn = async () => {
let clear = await clearStorage.clearAllStorage();
if (clear) {
this.props.navigation.navigate('LoginFirst');
}
}
每次打开应用程序时,都会显示登录屏幕。我已经使用启动画面(Splash.tsx)来检查会话。
如何保留会话而不显示登录屏幕。我的代码中还有什么要做的吗?
答案 0 :(得分:1)
登录时,您尝试将1存储在 userLoginStatus 中,但是,我们只能将字符串存储在AsyncStorage中。
因此,每次从AsyncStorage获取 userLoginStatus 时,它都会返回null,这就是为什么您始终登录登录屏幕的原因。