为了账号安全,请及时绑定邮箱和手机立即绑定

没有错误,但 Go 应用程序仍然无法正常工作

没有错误,但 Go 应用程序仍然无法正常工作

Go
aluckdog 2022-06-06 16:46:51
我正在开发一个网络聊天应用程序,我遇到了一个不应该发生的问题。在 main.go 我有这个功能:http.Handle("/chat", MustAuth(&templateHandler{filename: "chat.html"}))我刚刚使用 cookie 构建了一个身份验证文件(auth.go,仍在进行中),它是:package mainimport "net/http"type authHandler struct {    next http.Handler}func (h *authHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {    _, err := r.Cookie("auth")    if err == http.ErrNoCookie {        //not authenticated        w.Header().Set("Location", "/login")        w.WriteHeader(http.StatusTemporaryRedirect)        return    }    if err != nil {        //some other error        http.Error(w, err.Error(), http.StatusInternalServerError)        return    }    //success - call the next handler    h.next.ServeHTTP(w, r)}func MustAuth(handler http.Handler) http.Handler {    return &authHandler{next: handler}}问题是,当我运行它并打开 localhost 页面时,cookie 无法正常工作,也没有按应有的方式将我重定向到登录页面。
查看完整描述

1 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

我已经根据您提供的代码制作了一个完全编译的示例 - 但是它确实对我有用:lolcalhost:8080/chat将我重定向到localhost:8080/login 我怀疑您的浏览器可能已经设置了 cookie“auth”。


您可以按 STRG+SHIFT+I 并转到网络选项卡以查看传输的内容。检查确实没有为您设置 cookie。


我试过的代码:


package main


import "net/http"


type authHandler struct {

    next http.Handler

}


func ServeHTTP(w http.ResponseWriter, r *http.Request) {

    _, err := r.Cookie("auth")

    if err == http.ErrNoCookie {

        //not authenticated

        w.Header().Set("Location", "/login")

        w.WriteHeader(http.StatusTemporaryRedirect)

        return

    }

    if err != nil {

        //some other error

        http.Error(w, err.Error(), http.StatusInternalServerError)

        return

    }

    //success - call the next handler

    //h.next.ServeHTTP(w, r)

    w.Write([]byte("Hi"))

}


func main() {

    http.HandleFunc("/chat", ServeHTTP)

    http.ListenAndServe(":8080", nil)

}


查看完整回答
反对 回复 2022-06-06
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信