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](https://static.studygolang.com/171031/c921d05a5d14767cd32c137dcd8f1b98.png)
后台都是正常的,也没有出现什么问题,是什么原因呢?
刚才查了下才知道http包有redirect方法, 因为我用的是gin的插件,后来看到gin也封装了这个方法 ,我最后是这样写的,
redirect := conf.AuthCodeURL(state)
c.Redirect(http.StatusMovedPermanently, redirect)
因为我是想做oauth 认证码方式认证的第一步,所以好像重定向不行,我需要把这个URL返回到前端之后,用POST再发向服务器一次。
我现在想到的是,前端得到 这个URL, 然后再POST一次。但是这个URL如果有人改jquery脚本,不也还能看到吗?
重说一下,重定向方法 不能满足我想要的效果,因为重定向的那个URL我必须 用POST方法
#6
更多评论
我怎么感觉跟跨域一点关系都没有呢,如果是跨域的问题,浏览器 console 会有提示的。另外,你请求 `application/json`,响应应该返回 json 啊~
#1
啊,是之前遇到跨域请求的问题,Get的时候,会先发一个option,然后我就加了header的部分。然后就可以get了。
哦~~~~~~~~是因为我返回的格式 不对......
所以这种情况,我不应该返回json的是不?大神,如果是数据的插入或读取用json, 但是如果要是redirect之类的,就没有必要了是吧?
#2