react中路由鉴权

此鉴权使用react-router4之前版本,之后版本请看我最后写的一篇文章
https://blog.youkuaiyun.com/qzf_hainenggaima/article/details/103525747


vue.js中有丰富的钩子函数,比如全局前置守卫router.beforeEach,里面做一些判断,权限等。
react中的路由鉴权网上有很多大佬分享的丰富的资源,但是在这里我说下我在项目中用到的简单的方式

Route 可以定义 onEnter 和 onLeave 两个 hook ,这些hook会在页面跳转确认时触发一次。这些 hook 对于一些情况非常的有用,例如权限验证或者在路由跳转前将一些数据持久化保存起来。
在路由跳转过程中,onLeave hook 会在所有将离开的路由中触发,从最下层的子路由开始直到最外层父路由结束。然后onEnter hook会从最外层的父路由开始直到最下层子路由结束。

所以我们可以在最外层的route上面添加onEnter钩子实现权限验证。

<Route path="/" getComponent={app} onEnter={isLogin}>
要实现登录,需要在 React 应用中使用某种形式的后端接口来验证用户的凭证,例如用户名和密码。以下是一个简单的示例代码: ```jsx import React, { useState } from "react"; const Login = ({ onLogin }) => { const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const handleSubmit = async (e) => { e.preventDefault(); try { const response = await fetch("/api/login", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ username, password }), }); if (response.ok) { const data = await response.json(); onLogin(data.token); } else { setError("Invalid username or password"); } } catch (error) { setError("An error occurred. Please try again later"); } }; return ( <div> <h2>Login</h2> <form onSubmit={handleSubmit}> <label> Username: <input type="text" value={username} onChange={(e) => setUsername(e.target.value)} /> </label> <br /> <label> Password: <input type="password" value={password} onChange={(e) => setPassword(e.target.value)} /> </label> <br /> <button type="submit">Login</button> {error && <div>{error}</div>} </form> </div> ); }; export default Login; ``` 这个组件接受一个 `onLogin` 属性,它是一个回调函数,当用户登录成功时会调用它,传递一个凭证(例如 JWT token)。组件内部使用了三个状态变量 `username`、`password` 和 `error` 分别表示用户输入的用户名、密码和错误信息。当用户输入用户名和密码时,这两个变量会被更新。当用户提交表单时,组件会向后端接口发送一个包含用户名和密码的 POST 请求。如果验证成功,后端接口会返回一个包含凭证的 JSON 响应,组件会调用 `onLogin` 回调函数传递凭证。如果验证失败,组件会显示一个错误信息。 你可以在父组件中使用这个组件,传递一个处理凭证的回调函数,来实现登录的功能。在需要的组件中,你可以使用这个凭证来获取受保护的数据或执行受保护的操作。注意,在实际应用中,你需要使用 HTTPS 等安全协议来保护用户的凭证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值