Reactjs React路由器在受保护的路由上显示一个空白屏幕
所以本质上,我正在尝试一个身份验证工作流。所以基本上,主路由是受保护的,登录是不受保护的,注册是不受保护的,然后我有一个verifyEmail页面,如果你没有被验证,它会打开Reactjs React路由器在受保护的路由上显示一个空白屏幕,reactjs,react-router,react-router-dom,react-router-v4,Reactjs,React Router,React Router Dom,React Router V4,所以本质上,我正在尝试一个身份验证工作流。所以基本上,主路由是受保护的,登录是不受保护的,注册是不受保护的,然后我有一个verifyEmail页面,如果你没有被验证,它会打开 const PrivateRoute = ({component: RouteComponent,...rest}) =>{ const{currentUser}=useContext(AuthContext) function route (){ } return(
const PrivateRoute = ({component: RouteComponent,...rest}) =>{
const{currentUser}=useContext(AuthContext)
function route (){
}
return(
<Route
{...rest}
render={routeProps =>
!!currentUser && currentUser != null
?
currentUser.emailVerified ? <RouteComponent {...routeProps}/>:(<Redirect to={"/verifyEmail"}/>)
:
(<Redirect to={"/login"}/>)
}
/>
)
}
export default PrivateRoute
const PrivateRoute=({component:RouteComponent,…rest})=>{
const{currentUser}=useContext(AuthContext)
功能路由(){
}
返回(
!!currentUser&¤tUser!=null
?
currentUser.emailVerified?:()
:
()
}
/>
)
}
导出默认PrivateRoute
然后在App.js中
function App() {
return (
<div className={'App'}>
<AuthProvider>
<Router>
<div>
<PrivateRoute path="/" component={HomePage}/>
<Route path="/verifyEmail" component={Verify}/>
<Route path="/login" component={Login}/>
<Route path="/register" component={Register}/>
</div>
</Router>
</AuthProvider>
</div>
);
}
export default App;
函数应用程序(){
返回(
);
}
导出默认应用程序;
当前用户基本上是用户凭据,我使用Firebase进行身份验证。我遇到的问题是,登录后,它只显示一个空白屏幕,当电子邮件未经验证时,而不是显示verifyEmail页面
为了更详细地阐述这个问题,实际的问题是,如果一个用户没有通过电子邮件验证,那么它将不会发送到任何地方,并给我一个空白屏幕,这意味着您可以创建一个(组件)来包装您的路由,并在那里进行验证
例如:
import React, { useEffect } from 'react'
import { useHistory } from 'react-router-dom';
import { useSelector } from 'react-redux';
export default function RequireAuth({ children }) {
const history = useHistory();
const auth = useSelector(state => state.auth)
useEffect(() => {
if(!auth){
history.push("/")
}
}, [auth])
return (
<>
{children}
</>
)
}
您可以创建一个(组件)来包装路由,并在那里进行验证
例如:
import React, { useEffect } from 'react'
import { useHistory } from 'react-router-dom';
import { useSelector } from 'react-redux';
export default function RequireAuth({ children }) {
const history = useHistory();
const auth = useSelector(state => state.auth)
useEffect(() => {
if(!auth){
history.push("/")
}
}, [auth])
return (
<>
{children}
</>
)
}
这并不是我真正遇到的问题,我的工作流程会很好地检查身份验证。我所面临的问题是,电子邮件永远不会重定向到verifyEmail,但当我用Hello替换它时,我会看到一个显示Hello的屏幕。身份验证似乎不是问题,它不是重定向。在未登录时使用
const history=useHistory()
和history.push(“/verifyEmail”)
?比如在这个例子中?我还没有试过你的代码。因为它不容易与我的匹配,我要说的是,我面临的问题与你的答案所解决的问题不同,因为这不是我真正遇到的问题,我的工作流程会很好地检查身份验证。我所面临的问题是,电子邮件永远不会重定向到verifyEmail,但当我用Hello替换它时,我会看到一个显示Hello的屏幕。身份验证似乎不是问题,它不是重定向。在未登录时使用const history=useHistory()
和history.push(“/verifyEmail”)
?比如在这个例子中?我还没有试过你的代码。因为我的答案不太合适,所以我要说的是,我面临的问题与你的答案所解决的问题不同