请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

拦截器重定向问题

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

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

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

正在回答

3回答

拦截器方法:

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 09:29:37
提问者 阿斯顿_马丁 2019-04-01 18:40:25

这几个截图~

https://img1.sycdn.imooc.com//szimg/5ca1ea850001386618980812.jpg

https://img1.sycdn.imooc.com//szimg/5ca1ea88000163c319030875.jpg

https://img1.sycdn.imooc.com//szimg/5ca1ea880001bc8219020863.jpg


0 回复 有任何疑惑可以回复我~
  • xiaomo #1
    同学你好, 多谢提醒,我发现我git仓库里分支charter4的代码有个bug. 已经修复提交到分支charter4了, 请查看。可以解决token失效后跳转到登录页的问题。
    回复 有任何疑惑可以回复我~ 2019-04-01 21:19:26
  • xiaomo #2
    一般浏览器get请求的302是能正常跳转的。在ajax的post请求遇到302跳转时会出错。所以一种解决方法是服务端不直接进行redirect, 而是返回相关的错误提示, 由ajax回调方法里判断响应内容并主动进行重定向。
    回复 有任何疑惑可以回复我~ 2019-04-01 21:21:45
xiaomo 2019-04-01 18:08:09

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

0 回复 有任何疑惑可以回复我~
  • 提问者 阿斯顿_马丁 #1
    老师,截图放到回答里了,,谢谢~
    回复 有任何疑惑可以回复我~ 2019-04-01 18:45:06
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信