Javascript react本机应用中的身份验证流不工作
我正在使用本机CLI构建react本机应用程序。一切正常,但当我通过API登录到用户时,我会收到令牌和其他值。我将它们设置在AsyncStorage中,它应该跳转到买家仪表板屏幕,但它不能,但当我刷新应用程序时,它会跳转到买家仪表板。Mylogin.js位于app.js中一个单独的文件和导航堆栈中 Login.js=>我只需粘贴一个在按下登录按钮时运行的函数Javascript react本机应用中的身份验证流不工作,javascript,reactjs,react-native,authentication-flows,Javascript,Reactjs,React Native,Authentication Flows,我正在使用本机CLI构建react本机应用程序。一切正常,但当我通过API登录到用户时,我会收到令牌和其他值。我将它们设置在AsyncStorage中,它应该跳转到买家仪表板屏幕,但它不能,但当我刷新应用程序时,它会跳转到买家仪表板。Mylogin.js位于app.js中一个单独的文件和导航堆栈中 Login.js=>我只需粘贴一个在按下登录按钮时运行的函数 const login = async () => { if (name != '' &&
const login = async () => {
if (name != '' && password != '') {
const login_Credentials = new FormData();
login_Credentials.append('username', name);
login_Credentials.append('password', password);
setPress(true)
await axios({
method: 'POST',
url: api + 'login/',
data: login_Credentials,
headers: { 'Content-Type': 'multipart/form-data' }
}).then(async function (response) {
if (response.data.Success == true) {
const token = response.data.token.toString();
const super_user_status = response.data.super_user_status.toString();
const isLoggedIn = "1"
console.log('Logged In and set Storgae')
await AsyncStorage.multiSet([['isLoggedIn',isLoggedIn],['token', token], ['super_user_status', super_user_status]])
setName('')
setPassword('')
setPress(false)
} else if (response.data.Success == false) {
setPress(false)
setErrorMsg(response.data.Error)
setName('')
setPassword('')
}
}).catch(function (response) {
console.log(response, "error");
})
} else {
setErrorMsg('Please Enter Username/Password.')
}
}
及
App.js
// <AuthStackScreen />
// <BuyerDashboardStackScreens />
const App = () => {
const [user, setUser] = useState(false)
const [role, setRole] = useState('seller')
useEffect(()=>{
getKeysData(dataKeys)
},[])
const dataKeys = ['token', 'super_user_status', 'isLoggedIn'];
const getKeysData = async (keys) => {
const stores = await AsyncStorage.multiGet(keys);
const aData = stores.map(([key, value]) => ({ [key]: value }))
const token = aData[0]['token']
const super_user_status = aData[1]['super_user_status']
const isLoggedIn = aData[2]['isLoggedIn']
console.log('token',token)
console.log('SuperUser', super_user_status)
console.log('Log',isLoggedIn)
if(isLoggedIn == '1'){
setUser(true)
}else{
setUser(false)
}
}
//AsyncStorage.clear()
return (
<NavigationContainer>
{ user == false ?
<AuthStackScreen />
:
<BuyerDashboardStackScreens />
}
</NavigationContainer>
);
};
//
//
常量应用=()=>{
const[user,setUser]=useState(false)
const[role,setRole]=useState('seller')
useffect(()=>{
getKeysData(数据键)
},[])
const dataKeys=['token','super_user_status','isLoggedIn'];
const getKeysData=async(键)=>{
const stores=wait AsyncStorage.multiGet(键);
const aData=stores.map(([key,value])=>({[key]:value}))
const token=aData[0]['token']
const super_user_status=aData[1]['super_user_status']
常量isLoggedIn=aData[2]['isLoggedIn']
console.log('token',token)
console.log('SuperUser',super\u user\u status)
console.log('log',isLoggedIn)
如果(isLoggedIn=='1'){
setUser(真)
}否则{
setUser(false)
}
}
//AsyncStorage.clear()
返回(
{user==false?
:
}
);
};
在app.js中,我创建了两个堆栈,一个是auth,另一个是买方。正如您在上面的代码中看到的,我创建了const[user,setUser]=useState(false)
,当我在AsyncStorage中获得值时,它应该更新hook true的值,并根据返回函数中的条件运算符更改堆栈。
但它会在点击登录按钮后将页面从登录更改为仪表板上的刷新应用程序而不是打开。
我缺少什么来实现我的功能?
谢谢你的建议