反应+路由+安全
react + routing + security
我正在使用 React 和 react-router 构建一个 Web 应用程序,我想使用现有的外部访问管理基础设施 (OpenAM) 来保护我的 React 应用程序的一些路由。
我想保护 http://web.example.com:8080/myapp/#/user-profile url 这意味着只有登录用户才能访问此路由。
我还有其他一些路由 public 并且任何用户都可以打开它们,例如 http://web.example.com:8080/myapp/#/welcome.
访问管理保护 url,如果用户想要打开受保护的 url,则访问管理会显示登录表单,成功登录后,原始请求 url 将显示。
这里的问题是 react-router 在 '#' 字符后添加了路由信息,上面提到的两个不同的 urls 从访问管理器的角度来看是相同的,因为它们指的是相同的网络资源 (/myapp)。这两个 url 之间的差异出现在 '#' 字符之后。
我需要像这样没有“#”字符的真实 urls:
有没有办法在 React 中使用真正的 url 映射?
你们有什么想法或解决方法如何使用真实的 url 路由进行反应吗?
谢谢。
更新:
这是我的代码。 Web 浏览器中的 url 看起来不错,但我收到 "about did not match any routes" 错误。要求url:http://web.example.com:8080/myapp/about
import {Router, Route, IndexRoute, useRouterHistory} from 'react-router';
import {createHistory} from 'history';
const browserHistory = useRouterHistory(createHistory) ({
basename: '/myapp/'
});
ReactDOM.render(
<Router history={browserHistory}>
<Route path="/" component={MainLayout}>
<IndexRoute component={Home} />
<Route path="about" component={About} />
</Route>
</Router>
)
您可以按照评论中的建议使用 browserHistory
来摆脱 #
符号。如果你希望你的反应应用程序的根是 /myapp/
而不是 /
你可以尝试:
import {Router, Route, useRouterHistory} from 'react-router';
import {createHistory} from 'history';
const browserHistory = useRouterHistory(createHistory)({basename: '/myapp/'});
ReactDOM.render(
<Router history={browserHistory}>
...
</Router>
)
我正在使用 React 和 react-router 构建一个 Web 应用程序,我想使用现有的外部访问管理基础设施 (OpenAM) 来保护我的 React 应用程序的一些路由。
我想保护 http://web.example.com:8080/myapp/#/user-profile url 这意味着只有登录用户才能访问此路由。
我还有其他一些路由 public 并且任何用户都可以打开它们,例如 http://web.example.com:8080/myapp/#/welcome.
访问管理保护 url,如果用户想要打开受保护的 url,则访问管理会显示登录表单,成功登录后,原始请求 url 将显示。
这里的问题是 react-router 在 '#' 字符后添加了路由信息,上面提到的两个不同的 urls 从访问管理器的角度来看是相同的,因为它们指的是相同的网络资源 (/myapp)。这两个 url 之间的差异出现在 '#' 字符之后。
我需要像这样没有“#”字符的真实 urls:
有没有办法在 React 中使用真正的 url 映射? 你们有什么想法或解决方法如何使用真实的 url 路由进行反应吗?
谢谢。
更新: 这是我的代码。 Web 浏览器中的 url 看起来不错,但我收到 "about did not match any routes" 错误。要求url:http://web.example.com:8080/myapp/about
import {Router, Route, IndexRoute, useRouterHistory} from 'react-router';
import {createHistory} from 'history';
const browserHistory = useRouterHistory(createHistory) ({
basename: '/myapp/'
});
ReactDOM.render(
<Router history={browserHistory}>
<Route path="/" component={MainLayout}>
<IndexRoute component={Home} />
<Route path="about" component={About} />
</Route>
</Router>
)
您可以按照评论中的建议使用 browserHistory
来摆脱 #
符号。如果你希望你的反应应用程序的根是 /myapp/
而不是 /
你可以尝试:
import {Router, Route, useRouterHistory} from 'react-router';
import {createHistory} from 'history';
const browserHistory = useRouterHistory(createHistory)({basename: '/myapp/'});
ReactDOM.render(
<Router history={browserHistory}>
...
</Router>
)