猿问

带有 cookie 身份验证的 Gorilla websocket

这是我的设置:我正在构建一个带有用户登录的服务(使用 Negroni 和 Gorilla),在登录时,用户获得一个会话 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)。我是否正确地接近了 websocket 的身份验证?


任何帮助/建议将不胜感激!


江户川乱折腾
浏览 258回答 1
1回答

30秒到达战场

服务器将 WebSocket 握手作为普通 HTTP 请求处理,直到调用 Upgrade 为止。使用您将用于普通 HTTP 请求的任何身份验证。Gorilla 包不在带有 auth 注释的代码行中起作用。
随时随地看视频慕课网APP

相关分类

Go
我要回答