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 分支。
后台都是正常的,也没有出现什么问题,是什么原因呢?
有疑问加站长微信联系(非本文作者)

我怎么感觉跟跨域一点关系都没有呢,如果是跨域的问题,浏览器 console 会有提示的。另外,你请求
application/json
,响应应该返回 json 啊~啊,是之前遇到跨域请求的问题,Get的时候,会先发一个option,然后我就加了header的部分。然后就可以get了。
哦
~~~~是因为我返回的格式 不对......所以这种情况,我不应该返回json的是不?大神,如果是数据的插入或读取用json, 但是如果要是redirect之类的,就没有必要了是吧?
我这个问题太水了,见谅见谅。
再请教个问题前辈,我现在把一个重定向的url返回了前端,这个时候我已经可以用jquery去做页面重定向了,但是我觉得不太安全,因为这个url后面的参数都是很隐私的,遇到这种情况,怎么处理会好些呢?
重定向为什么不用 http 协议来做?参数隐私,那得通过加密方式处理了。
刚才查了下才知道http包有redirect方法, 因为我用的是gin的插件,后来看到gin也封装了这个方法 ,我最后是这样写的,
因为我是想做oauth 认证码方式认证的第一步,所以好像重定向不行,我需要把这个URL返回到前端之后,用POST再发向服务器一次。
我现在想到的是,前端得到 这个URL, 然后再POST一次。但是这个URL如果有人改jquery脚本,不也还能看到吗?
重说一下,重定向方法 不能满足我想要的效果,因为重定向的那个URL我必须 用POST方法
你以为 POST 数据就安全了?
呃,我也不知道诶前辈,我的意思是中间转的那下,接收完再请求,url的内容会被暴露出来。 重定向的话,默认是GET方法是吗