采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师你好,拦截器里写如下代码后
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.4k 23
2.1k 13
1.7k 13
1.2k 13
1.3k 13