无法重定向到' /'在onEnter钩子中替换

时间:2016-01-25 10:25:29

标签: javascript reactjs single-page-application react-router

我有这两种方法:

  toLogin: function (nextState, replace) {
    if (!localStorage.get("token")) {
      return replace('/signin');
    }
  },
  toHome: function (nextState, replace) {
    if (localStorage.get("token")) {
      return replace('/');
    }
  }

return replace('/signin')就像魅力一样,return replace('/')给了我错误:

Uncaught SecurityError: Failed to execute 'replaceState' on 'History': A history state object with URL 'http:' cannot be created in a document with origin 'http://localhost:3000'.

我是否需要设置一些我在文档中遗漏的基本URL,或者这是一个错误?

1 个答案:

答案 0 :(得分:0)

您的代码或React在某处试图将http://... URL插入到导致此安全违规的历史记录中(这意味着错误的含义)。

pushState的URL参数应该相对于当前页面,或者是您自己域中的绝对URL。你不能推动州跨域 - 这将是一个重大的安全漏洞。

MDN documentation说:

  

此历史记录条目的URL由此参数指定。请注意,浏览器在调用pushState()后不会尝试加载此URL,但可能会稍后尝试加载URL,例如在用户重新启动浏览器之后。新URL不一定是绝对的;如果它是相对的,则相对于当前URL进行解析。新网址必须与当前网址的来源相同;否则,pushState()将抛出异常。此参数是可选的;如果没有指定,则将其设置为文档的当前网址。