登录认证的路由——app.Handle("GET", "/v1/users/token", u.Token)
.
我们可以从 request.BasicAuth 中获取名称和密码。
func (u *User) Token(ctx context.Context, w http.ResponseWriter, r *http.Request, params map[string]string) error {
...
name, pass, ok := r.BasicAuth()
...
}
但是如何设置名称并从客户端网址传递?
最佳答案
在浏览器要求用户提供基本身份验证凭据之前,您必须拒绝请求访问(使用状态码 401 Unauthorized)。您应该设置标题 WWW-Authenticate
至Basic realm="Your message"
.
另见 this article .
所以在你的代码中,当 ok
是错误的,您应该拒绝该请求:
func (u *User) Token(ctx context.Context, w http.ResponseWriter, r *http.Request, params map[string]string) error {
...
name, pass, ok := r.BasicAuth()
if !ok {
w.Header().Set("WWW-Authenticate", "Basic realm=\"Your message\"")
http.Error(w, "Must supply authentication credentials", http.StatusUnauthorized)
return
}
}
关于api - Web api 将名称和密码设置为 request.BasicAuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59518205/