【发布时间】:2021-04-17 21:52:21
【问题描述】:
我正在将一个应用程序从 Firebase 迁移到 AWS Amplify。我想创建一个 React 上下文,如果用户未登录,它将提供路由保护。
比如我的 Auth.js 文件:
import React, { useEffect, useState, createContext } from 'react'
import fire from './firebase'
export const AuthContext = createContext()
export const AuthProvider = ({ children }) => {
const [currentUser, setCurrentUser] = useState(null)
useEffect(() => {
fire.auth().onAuthStateChanged(setCurrentUser)
}, [])
return (
<AuthContext.Provider value={{ currentUser }}>
{children}
</AuthContext.Provider>
)
}
还有我的 App.js 文件:
import * as React from 'react'
import { BrowserRouter, Switch, Route } from 'react-router-dom'
import Navbar from './components/navbar/navbar'
import Home from './routes/Home'
import Register from './routes/Register'
import Footer from './components/footer/Footer'
import AlertProvider from './components/notification/NotificationProvider'
import MyAlert from './components/notification/Notification'
import { AuthProvider } from './Auth'
import PrivateRoute from './PrivateRoute'
const App = () => {
return (
<AuthProvider>
<BrowserRouter>
<AlertProvider>
<div className="app">
<Navbar />
<MyAlert />
<Switch>
<Route path="/" exact component={Home} />
<Route
path="/register"
exact
component={Register}
/>
<Route
path="/forgot-password"
render={(props) => <div>Forgot Password</div>}
/>
<Route path="*" exact={true} component={Home} />
</Switch>
<Footer />
</div>
</AlertProvider>
</BrowserRouter>
</AuthProvider>
)
}
export default App
这一切都很好。
如何使用 AWS Amplify 做类似的事情?本质上,我将如何创建一个 Auth.js 文件,该文件将环绕我的路由并为它们提供用户上下文(当用户的身份验证状态更改时会更新)。
谢谢!
【问题讨论】:
-
也许为此使用上下文是不必要的,相反,您可以有一个 HOC 组件来包裹您的受保护路由并检查用户是否从那里经过身份验证,然后允许他们使用该路由或如果不重定向它们到指定的路径。
-
谢谢,您有代码示例的链接吗?我是新手,我肯定会很感激我能消化的某种代码。
标签: reactjs amazon-web-services aws-amplify react-context