当由javascript提取函数调用时,我的golang函数不会重定向到任何地方。 这是我先前的问题的扩展,这个问题太广泛了。 Facebook Oauth CORS错误

这是我的JavaScript提取函数,称为golang api。

1
2
3
4
5
6
let config = {
  method: 'GET',
}

fetch("http://localhost:7001/testFunction", config).then(response => {
  ...

这是我的golang函数尝试之后重定向

1
2
3
4
5
func testfunc(w http.ResponseWriter, r *http.Request) {
    http.Redirect(w,r,"https://www.facebook.com/dialog/oauth?..", 302)
    http.Redirect(w, r,"http://localhost:7001/", 302)
    http.Redirect(w, r,"http://google.com/", 302)
}

结果应该是页面重定向到域外的页面,但我在网络上始终遇到此错误。

1
Fetch API cannot load http://google.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

我不能使用无心跳模式,因为我需要重定向到该页面,甚至还需要检索一个json。

我确保golang服务器标头正确,并允许javascript起源(localhost:3000)。 并且我确保facebook上的oauth api允许使用golang服务器域(localhost:7001)。 但是,访问本地主机域范围之外的域时,重定向始终被阻止。

  • 正如@OneOfOne在回答中所说,您不能这样做。 您的JS代码只有在同一站点中嵌入了JS时,才必须发出重定向。 否则,您将收到CORS错误。

您无法做到这一点,您实际上必须重定向浏览器(在弹出窗口中打开它)。

  • 谢谢! 我最初在服务器中处理重定向,因为这是我最初学习oauth2的方式。 我以为服务器将处理密钥交换和重定向。 但是,使用javascript前端,我可以自己获取网址。 所以我只使用window.location和解析的URL。