采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师你好,拦截器里写如下代码后
if len(username)<3||!IsTokenVaild(token){ //w.WriteHeader(http.StatusForbidden) http.Redirect(w, r, "/static/view/signin.html", http.StatusFound) return }
我先正常登陆,没有问题了。然后清除浏览器数据,刷新页面,并没有跳转到登陆页面,这是什么原因呢?
拦截器方法:
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(); } });
好的!!谢谢老师!
这几个截图~
同学你好, 多谢提醒,我发现我git仓库里分支charter4的代码有个bug. 已经修复提交到分支charter4了, 请查看。可以解决token失效后跳转到登录页的问题。
一般浏览器get请求的302是能正常跳转的。在ajax的post请求遇到302跳转时会出错。所以一种解决方法是服务端不直接进行redirect, 而是返回相关的错误提示, 由ajax回调方法里判断响应内容并主动进行重定向。
麻烦把user/info接口的返回信息截图一下?
老师,截图放到回答里了,,谢谢~
登录后可查看更多问答,登录/注册
紧随“云时代”技术潮流,分布式云存储系统,做第一代云程序员
1.3k 23
2.1k 13
1.6k 13
1.1k 13
1.2k 13