【发布时间】:2016-11-13 20:45:24
【问题描述】:
我正在使用 React 和 react-router 构建一个 Web 应用程序,我想使用现有的外部访问管理基础架构 (OpenAM) 保护我的 React 应用程序的一些路由。
我想保护http://web.example.com:8080/myapp/#/user-profile url,这意味着只有登录的用户才能访问此路由。
我还有其他一些公开的路线,任何用户都可以打开它们,例如http://web.example.com:8080/myapp/#/welcome。
访问管理保护 url,如果用户想要打开受保护的 url,则访问管理会显示一个登录表单,成功登录后将显示原始请求的 url。
这里的问题是 react-router 在 '#' 字符之后添加了路由信息,并且上面提到的两个不同的 url 从访问管理器的角度来看是相同的,因为它们引用了相同的 Web 资源(/myapp)。这两个 url 之间的区别出现在 '#' 字符之后。
我需要有没有像这样的“#”字符的真实网址:
有没有办法在 React 中使用真实的 url 映射? 你们有任何想法或解决方法如何使用真正的 url 路由和 react 吗?
谢谢。
更新: 这是我的代码。 Web 浏览器中的 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>
)
【问题讨论】:
-
react-router支持像这样使用浏览器历史记录,但您必须配置服务器以提供正确的资源。 -
你能告诉我们你的路线的相关线路吗?
react-router在其路由上支持onEnter道具。您可以编写一个每次点击时都会调用的函数。 -
我将 history={browserHistory} 添加到我的路由器标签中,而 # 字符消失了。看起来很好。现在我有另一个问题。根 url 是 web.example.com:8080/myapp,欢迎内容链接到 web.example.com:8080/welcome 而不是 web.example.com:8080/myapp/welcome。呜呜呜……
标签: security reactjs react-router openam