我试图在我试图发送到 Go 服务器的请求中传递一个附加参数 -websocket.create_connection("ws://<ip>:port/x/y?token="qwerty")Go 服务器实现如下 -func main() { err := config.Parse() if err != nil { glog.Error(err) os.Exit(1) return } flag.Parse() defer glog.Flush() router := mux.NewRouter() http.Handle("/", httpInterceptor(router)) router.Handle("/v1/x", common.ErrorHandler(stats.GetS)).Methods("GET") router.Handle("/v1/x/y", common.ErrorHandler(stats.GetS)).Methods("GET") var listen = fmt.Sprintf("%s:%d", config.Config.Ip, config.Config.Port) err = http.ListenAndServe(listen, nil) if err != nil { glog.Error(err) os.Exit(1) }}func httpInterceptor(router http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { startTime := time.Now() if !auth.Auth(w, req) { http.Error(w, "Failed authentication", 401) return } router.ServeHTTP(w, req) finishTime := time.Now() elapsedTime := finishTime.Sub(startTime) switch req.Method { case "GET": case "POST": } })}我应该如何在 Go 服务器中查找和解析令牌,以便身份验证成功?库函数func ParseFromRequest(req *http.Request, keyFunc Keyfunc) (token *Token, err error) { // Look for an Authorization header if ah := req.Header.Get("Authorization"); ah != "" { // Should be a bearer token if len(ah) > 6 && strings.ToUpper(ah[0:6]) == "BEARER" { return Parse(ah[7:], keyFunc) } } // Look for "access_token" parameter req.ParseMultipartForm(10e6) if tokStr := req.Form.Get("access_token"); tokStr != "" { return Parse(tokStr, keyFunc) } return nil, ErrNoTokenInRequest}
3 回答
慕森卡
TA贡献1806条经验 获得超8个赞
调用FormValue获取查询参数:
token := req.FormValue("token")
req 是一个 *http.Request
另一种方法是调用ParseForm并req.Form直接访问:
if err := req.ParseForm(); err != nil {
// handle error
}
token := req.Form.Get("token")
OP 在评论中询问如何映射"token"到"access_token"正在查找的外部包"access_token"。在调用外部包之前执行此代码:
if err := req.ParseForm(); err != nil {
// handle error
}
req.Form["access_token"] = req.Form["token"]
当外部包调用时req.Form.Get("access_token"),它会得到与"token"参数相同的值。
慕雪6442864
TA贡献1812条经验 获得超5个赞
取决于您想要解析令牌的方式,如果它来自表单或 URL。
如果令牌是从表单发送的,则可以使用第一个答案,而在 URL 的情况下,我建议使用它。这对我有用
token := req.URL.Query().Get("token")
- 3 回答
- 0 关注
- 208 浏览
添加回答
举报
0/150
提交
取消