如何在Go中正确组织身份验证?(JWT、会话、中间件)
大家好!我是一名Go新手开发者,正在用纯Go(没有使用Gin或Echo等框架)编写我的第一个REST API。我在身份验证问题上卡住了。我读了很多文章,但每篇文章都推荐不同的方法:有人用JWT,有人用基于cookie的会话,还有人通过第三方服务使用OAuth2。我完全困惑了。
我的任务是:制作一个简单的笔记API。用户注册、登录、获取token,然后使用它来访问受保护的endpoint。目前我在handler中草拟了这样一个简单的密码验证代码:
```go
func loginHandler(w http.ResponseWriter, r *http.Request) {
// ... 解析包含登录名和密码的JSON
user, err := findUserByEmail(email)
if err != nil || !checkPasswordHash(password, user.Hash) {
http.Error(w, "unauthorized", http.StatusUnauthorized)
return
}
// 接下来呢?如何保存身份验证状态?
w.Write([]byte("logged in"))
}
```
问题:
1. 目前哪种方法被认为是