这是我的设置:我正在构建一个带有用户登录的服务(使用 Negroni 和 Gorilla),登录后,用户会获得一个会话 cookie,服务器使用该会话 cookie 来授权受保护的端点。受保护的端点之一允许用户/客户端与服务器打开 Websocket,如下所示:
app := negroni.New()
r := mux.NewRouter()
r.HandleFunc("/auth/connection", func(rw http.ResponseWriter, req *http.Request) {
// authorize request using req.Cookie("session_id")
// create websocket
conn, err := upgrader.Upgrade(rw, req, nil)
if err != nil {
panic(err)
}
defer conn.Close()
// do stuff...
})
app.UseHandler(r)
app.Run(":3000")
然而,req.Cookies()
始终为空,这意味着我无法授权任何请求"/auth/connection"
——而且我几乎可以肯定这不是 websocket 客户端的问题(如果你好奇的话,我正在使用这个 Python 包测试它:https://github.com/liris/websocket-client https://github.com/liris/websocket-client)。我是否正确地进行了 Websocket 身份验证?
任何帮助/建议将不胜感激!
服务器将 WebSocket 握手作为普通 HTTP 请求进行处理,直至调用 Upgrade。使用用于普通 HTTP 请求的任何身份验证。
Gorilla 包在带有 auth 注释的代码行中未运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)