我有一个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。如果存在,则将身份验证设置为 true 并将其加载到 AppContext 提供程序中。服务器 API 路由当然是受保护的服务器端。但是客户端我可以使用其他组件中的身份验证值来允许或禁止访问。例如,在名为UserForm.js的组件中,我像这样检查身份验证(为了清楚起见,删除了一些代码):
import { AppContext } from '../DashBoard'
export default function UserForm(){
let { authenticated, setAuthenticated} = useContext(AppContext)
if(!authenticated){
document.location = '/signin'
return <></>
}
如果它们没有经过身份验证,那么我会将它们重定向到 SignIn.js 组件。