求教, 遇到跨域请求,但是添加了相关的header,可返回到前端的时候,$.ajax总是走error 函数?

oscarzhou · 2017-10-31 01:34:48 · 1320 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-10-31 01:34:48 的主题,其中的信息可能已经有所发展或是发生改变。

func (this *OauthController) LoginByAuth(c *gin.Context) {
    fmt.Println(".......................LoginByAuth")
    authServer := c.DefaultQuery("authServer", "")
    conf = readCredentialFile("\\conf\\creds.json", authServer)
    state := randToken()
    session := sessions.Default(c)
    session.Set("state", state)
    session.Save()


    c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
    c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type")
    c.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT")
    c.Writer.Write([]byte("<html><title>Golang Google</title> <body> <a href='" + getLoginURL(state) + "'><button>Login with Google!</button> </a> </body></html>"))

}

因为有跨域请求问题,所以加了三处header的参数,但是c.Writer.Write 之后,ajax如下:

$.ajax({
                    url: 'http://localhost:9090/login?authServer=google',
                    // url: 'http://localhost:9090/login',
                    type: 'GET',
                    contentType: 'application/json',
                    dataType: 'json',
                    success: function(data){
                        alert(data)
                    },
                    error: function(status){
                        alert("error:"+ status)
                    }
                });

但是一直走error 分支。

WeChat Image_20171031143424.png

后台都是正常的,也没有出现什么问题,是什么原因呢?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1320 次点击  
加入收藏 微博
8 回复  |  直到 2017-10-31 04:05:11
channel
channel · #1 · 7年之前

我怎么感觉跟跨域一点关系都没有呢,如果是跨域的问题,浏览器 console 会有提示的。另外,你请求 application/json,响应应该返回 json 啊~

oscarzhou
oscarzhou · #2 · 7年之前
channelchannel #1 回复

我怎么感觉跟跨域一点关系都没有呢,如果是跨域的问题,浏览器 console 会有提示的。另外,你请求 `application/json`,响应应该返回 json 啊~

啊,是之前遇到跨域请求的问题,Get的时候,会先发一个option,然后我就加了header的部分。然后就可以get了。

~~~~是因为我返回的格式 不对......

所以这种情况,我不应该返回json的是不?大神,如果是数据的插入或读取用json, 但是如果要是redirect之类的,就没有必要了是吧?

oscarzhou
oscarzhou · #3 · 7年之前
channelchannel #1 回复

我怎么感觉跟跨域一点关系都没有呢,如果是跨域的问题,浏览器 console 会有提示的。另外,你请求 `application/json`,响应应该返回 json 啊~

我这个问题太水了,见谅见谅。

oscarzhou
oscarzhou · #4 · 7年之前
channelchannel #1 回复

我怎么感觉跟跨域一点关系都没有呢,如果是跨域的问题,浏览器 console 会有提示的。另外,你请求 `application/json`,响应应该返回 json 啊~

再请教个问题前辈,我现在把一个重定向的url返回了前端,这个时候我已经可以用jquery去做页面重定向了,但是我觉得不太安全,因为这个url后面的参数都是很隐私的,遇到这种情况,怎么处理会好些呢?

channel
channel · #5 · 7年之前

重定向为什么不用 http 协议来做?参数隐私,那得通过加密方式处理了。

oscarzhou
oscarzhou · #6 · 7年之前
channelchannel #5 回复

重定向为什么不用 http 协议来做?参数隐私,那得通过加密方式处理了。

刚才查了下才知道http包有redirect方法, 因为我用的是gin的插件,后来看到gin也封装了这个方法 ,我最后是这样写的,

     redirect := conf.AuthCodeURL(state)
c.Redirect(http.StatusMovedPermanently, redirect)

因为我是想做oauth 认证码方式认证的第一步,所以好像重定向不行,我需要把这个URL返回到前端之后,用POST再发向服务器一次。

我现在想到的是,前端得到 这个URL, 然后再POST一次。但是这个URL如果有人改jquery脚本,不也还能看到吗?

重说一下,重定向方法 不能满足我想要的效果,因为重定向的那个URL我必须 用POST方法

channel
channel · #7 · 7年之前

你以为 POST 数据就安全了?

oscarzhou
oscarzhou · #8 · 7年之前
channelchannel #7 回复

你以为 POST 数据就安全了?

呃,我也不知道诶前辈,我的意思是中间转的那下,接收完再请求,url的内容会被暴露出来。 重定向的话,默认是GET方法是吗

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传