Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何保护基于iframe的react路由_Reactjs_React Router - Fatal编程技术网

Reactjs 如何保护基于iframe的react路由

Reactjs 如何保护基于iframe的react路由,reactjs,react-router,Reactjs,React Router,目前我有一个带有身份验证实现的react路由器。它适用于简单的基于组件的路由。 这是我的PrivateRoute组件 import { Route } from "react-router-dom"; import React from 'react'; import { Redirect } from 'react-router' export default function PrivateRoute ({component: Component, authed, ...rest

目前我有一个带有身份验证实现的react路由器。它适用于简单的基于组件的路由。 这是我的PrivateRoute组件

import {  Route } from "react-router-dom";
import React from 'react';
import { Redirect } from 'react-router'

    export default function PrivateRoute ({component: Component, authed, ...rest}) {
        return (
          <Route
            {...rest}
            render={(props) => authed === true  
              ? <Component {...props} /> 
              : <Redirect to={{pathname: '/', state: {from: props.location}}} />} 
          /> 
        )
      }
从“react router dom”导入{Route};
从“React”导入React;
从“react router”导入{Redirect}
导出默认函数PrivateRoute({component:component,authed,…rest}){
返回(
授权===true
?  
: } 
/> 
)
}
这些路线都能正常工作

<BrowserRouter>
        <Switch>
            <PrivateRoute authed={this.state.isAuthenticated} path='/register' component={RegisterPage} />
        </Switch>
    </BrowserRouter>

问题发生在那些没有组件的路由类型上

<Route path="/route1" render={(props) => <iframe frameBorder={0} src={constans.urlRoute1} className="iframe" />} /> 
}/>
这是我建议的解决方案,使其作为专用路由工作,但问题是它缺少url重定向

<Route path="/route1" render={(props) => ((this.state.isAuthenticated) ? <iframe frameBorder={0} src={constans.urlRoute1} className="iframe" /> : <NewLandingPage {...props} /> )} />
((this.state.isAuthenticated)?:)}>

那么,如何使用iframe实现重定向呢?

如果有人从谷歌无意中发现它,请将其作为答案发布:

<Route path="/route1" render={(props) => ((this.state.isAuthenticated) ? <iframe frameBorder={0} src={constans.urlRoute1} className="iframe" /> : <Redirect to='/my/link' /> )} />
((this.state.isAuthenticated)?:)}>
我编辑了ProtectedRoute,因此它也可以与iframe一起使用

import { Route } from 'react-router-dom';
import React from 'react';
import { Redirect } from 'react-router';

export default ({ component: Component, render: renderFn, authed, ...rest }) =>
  Component ? (
    <Route
      {...rest}
      render={props =>
        authed === true ? (
          <Component {...props} />
        ) : (
          <Redirect to={{ pathname: '/', state: { from: props.location } }} />
        )
      }
    />
  ) : (
    <Route {...rest} render={props => authed === true ? () => renderFn(props) : () => <Redirect to="my/link" />} />
  );

从'react router dom'导入{Route};
从“React”导入React;
从“react router”导入{Redirect};
导出默认值({component:component,render:renderFn,authed,…rest})=>
组件?(
授权===真(
) : (
)
}
/>
) : (
授权===true?()=>renderFn(道具):()=>}/>
);
并调用iFrame路由,如下所示:

<Route authed={this.state.isAuthenticated} path="/route1" render={props => <iframe frameBorder={0} src={constans.urlRoute1} className="iframe" />} />
}/>

你是什么意思?你为什么不渲染
而不是
?这确实很管用@SagiRika,尽管我会尝试将其制作成某种ProtectedFrameRoute,只是为了让它更干净。我编辑了我的评论,将编辑好的ProtectedRoute包含在其中,以匹配这两种情况。你能告诉我你调整了什么吗,因此我可以相应地编辑我的答案?我必须将授权状态传递给iframe路由的调用
}/>