reactjs - 在 MERN 中,我如何在客户端管理 JWT cookie?
问题描述
谁能向我解释如何在 MERN 堆栈中使用 cookie?我正在尝试为社交媒体做一个模拟。我了解第一步,但随后 - 我不知道如何进行。
- 我为登录、注册、注销创建端点。
- 我创建了反应应用程序并制作了注册表单,登录表单。从那里 - 我正在向我的快速端点发送 axios 请求。
- 在快递 - 我正在保存到 MongoDB 用户或从数据库检查登录名 + 密码。
- 我正在创建一个带有 id 有效负载的 JWT 令牌并通过 cookie 发送它。
但接下来我该怎么办?如何保存在反应应用程序中登录的用户?以及如何检查用户是否仍然登录并且 cookie 是否存在?谢谢你的帮助!
解决方案
我有一个repo,它可以完成你想要做的大部分事情。在名为SignInForm.js的 React 组件中,我使用 POST 请求对用户进行身份验证。如果身份验证成功,服务器会设置一个名为“token”的 cookie,然后客户端会重定向到名为Dashboard.js 的组件。 在 Dashboard.js 中,除其他外,我有以下代码行:
import {useCookies} from 'react-cookie'
export const AppContext = createContext()
export default function DashBoard() {
const [cookies, setCookie, removeCookie] = useCookies(['token'])
let [authenticated, setAuthenticated] = useState(cookies.token !== undefined)
return (
<AppContext.Provider value={{authenticated, setAuthenticated}}>
上面的代码查找名为“token”的 cookie。如果它存在,那么它将 authenticated 设置为 true 并将其加载到 AppContext 提供程序中。服务器 API 路由当然是受保护的服务器端。但是客户端我可以在其他组件中使用 authenticated 的值来允许或禁止访问。例如在一个名为UserForm.js的组件中,我像这样检查身份验证(为清楚起见,删除了一些代码):
import { AppContext } from '../DashBoard'
export default function UserForm(){
let { authenticated, setAuthenticated} = useContext(AppContext)
if(!authenticated){
document.location = '/signin'
return <></>
}
如果它们没有经过身份验证,那么我会将它们重定向到 SignIn.js 组件。
推荐阅读
- mysql - 如何更改mysql中json列的键名
- python - 检查二维数组中是否存在所有值都相等的列的函数?
- sequencing - 如何在 MuSE 调用中将选项“-r”或“-l”与 WGS 数据一起使用?
- firebase - 如何为 Flutter Web 应用添加图像预览?
- android - 将网络摄像头、数码显微镜连接到安卓设备
- javascript - TypeError:网络请求失败。如何正确地将数组中的多个图像附加到 formData。反应原生
- wkhtmltopdf - 删除页眉空间和高度
- flutter - 如何跳转到飞镖列表中的下一个元素,(forLoops)
- json - vue 用数组遍历对象
- angular - Angular - 在根应用程序中包含库文件