拦截器重定向问题

来源:4-8 编码实战:快速实现访问鉴权接口+小结

阿斯顿_马丁

2019-04-01

老师你好,拦截器里写如下代码后

if len(username)<3||!IsTokenVaild(token){
			//w.WriteHeader(http.StatusForbidden)
			http.Redirect(w, r, "/static/view/signin.html", http.StatusFound)
			return
		}

我先正常登陆,没有问题了。然后清除浏览器数据,刷新页面,并没有跳转到登陆页面,这是什么原因呢?
图片描述

写回答

3回答

xiaomo

2019-04-01

拦截器方法:

func HTTPInterceptor(h http.HandlerFunc) http.HandlerFunc {
    return http.HandlerFunc(
        func(w http.ResponseWriter, r *http.Request) {
            r.ParseForm()
            username := r.Form.Get("username")
            token := r.Form.Get("token")

            //验证登录token是否有效
            if len(username) < 3 || !IsTokenValid(token) {
                // token校验失败则跳转到直接返回失败提示
                resp := util.NewRespMsg(
                    int(common.StatusInvalidToken),
                    "token无效",
                    nil,
                )
                w.Write(resp.JSONBytes())
                return
            }
            h(w, r)
        })
}

 home.html

$.ajax({
  url: "/user/info?" + queryParams(),
  type: "POST",
  error: function (jqXHR, textStatus, errorThrown) {
    if (textStatus == "error") {
      alert(textStatus + " : " + errorThrown);
    } else {
      alert(textStatus);
    }
  },
  success: function (body, textStatus, jqXHR) {
    var resp = JSON.parse(body);
    // 这里主动进行跳转
    if (resp.code == 10005) {
      window.location.href = "/static/view/signin.html";
    }
    document.getElementById("username").innerHTML = resp.data.Username;
    document.getElementById("regtime").innerHTML = resp.data.SignupAt;
    updateFileList();
  }
});


0
1
阿斯顿_马丁
好的!!谢谢老师!
2019-04-02
共1条回复

阿斯顿_马丁

提问者

2019-04-01

这几个截图~

//img.mukewang.com/szimg/5ca1ea850001386618980812.jpg

//img.mukewang.com/szimg/5ca1ea88000163c319030875.jpg

//img.mukewang.com/szimg/5ca1ea880001bc8219020863.jpg


0
2
xiaomo
一般浏览器get请求的302是能正常跳转的。在ajax的post请求遇到302跳转时会出错。所以一种解决方法是服务端不直接进行redirect, 而是返回相关的错误提示, 由ajax回调方法里判断响应内容并主动进行重定向。
2019-04-01
共2条回复

xiaomo

2019-04-01

麻烦把user/info接口的返回信息截图一下?

0
1
阿斯顿_马丁
老师,截图放到回答里了,,谢谢~
2019-04-01
共1条回复

Go实战仿百度云盘-实现企业级分布式云存储系统

紧随“云时代”技术潮流,分布式云存储系统,做第一代云程序员

1077 学习 · 494 问题

查看课程