Reactjs React路由器在受保护的路由上显示一个空白屏幕

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(

所以本质上,我正在尝试一个身份验证工作流。所以基本上,主路由是受保护的,登录是不受保护的,注册是不受保护的,然后我有一个verifyEmail页面,如果你没有被验证,它会打开

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”)
?比如在这个例子中?我还没有试过你的代码。因为我的答案不太合适,所以我要说的是,我面临的问题与你的答案所解决的问题不同