javascript - 如何使用令牌持久登录?
问题描述
您好,我已经创建了用于登录和注册的 dotnet core web api,但在应用程序中刷新后它总是尝试再次登录。由于我是原生反应新手,因此无法将解决方案应用于我的项目。我使用 redux,这是我的操作:
export const signin = (email, password) => {
return async dispatch => {
const response = await fetch(
'http://localhost:5000/api/user/login',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: email,
password: password,
}),
}
);
if (!response.ok) {
throw new Error('Something went wrong!');
}
const resData = await response.json();
console.log(resData);
dispatch({ type: SINGIN, token: resData.token, userId: resData.id });
saveDataToStorage(resData.token);
};
};
const saveDataToStorage = (token, userId) => {
AsyncStorage.setItem('userData', JSON.stringify({
token: token,
})
);
};
这是我的带有反应导航 5 的导航器:
export const Navigator = () => {
const [userToken, setUserToken] = React.useState(null);
const userData = AsyncStorage.getItem('userData');
const authContext = React.useMemo(() => {
return {
signIn: () => {
setUserToken(userData);
},
singnUp: () => {
setUserToken(userData);
},
signOut: () => {
setUserToken(null);
},
};
}, [userData]);
return (
<AuthContext.Provider value={authContext}>
<NavigationContainer>
<RootStackScreen userToken={userToken} />
</NavigationContainer>
</AuthContext.Provider >
);
};
正如我所说,我找不到应用我找到的解决方案的方法。谢谢你的帮助。
解决方案
首先,确保您使用 AsyncStorage 的所有操作都应该是异步的(使用 promise 或 async/await)。
然后按照这个来实现您的应用程序的身份验证流程。
https://reactnavigation.org/docs/auth-flow
我的这个回答会对你有所帮助。
推荐阅读
- python - 限制报纸的 URL 输出
- node.js - 带有 Winston 的 Logentries 未捕获 ERROR、DEBUG
- flutter - Flutter:同一行中的多个表单字段,如“填空”样式
- firebase - Firebase:编写自定义可调用云函数与 Cloud Firestore 触发器函数
- c++ - 致命错误:opencv2/core.hpp:没有此类文件或目录编译在 opencv4 中终止
- angular - 如何在角度应用程序中从 instagram 导入帖子?
- angular - 重定向到 Angular 应用程序后缺少声明
- android - RecycleViewAdapter 中带有 CardView 的动态片段
- python - Flask.test_client().post 和 JSON 编码
- arrays - 将所有选定的切片器项值读取到数组变量中