从入门到精通:Go 实现基于 Token 的登录流程深度指南
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"github.com/dgrijalva/jwt-go"
)
var jwtKey = []byte("your-256-bit-secret")
// UserClaims 定义了 JWT 的 payload
type UserClaims struct {
Username string `json:"username"`
jwt.StandardClaims
}
// loginHandler 处理登录请求
func loginHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
return
}
// 假设这里从请求中获取用户名和密码进行验证,验证通过后生成 token
username := "exampleUser"
token := jwt.NewWithClaims(jwt.SigningMethodHS256, UserClaims{
Username: username,
StandardClaims: jwt.StandardClaims{
ExpiresAt: 15000, // 设置过期时间
},
})
// 使用密钥签名 token
tokenString, err := token.SignedString(jwtKey)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// 返回 token 给客户端
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]string{
"token": tokenString,
})
}
func main() {
http.HandleFunc("/login", loginHandler)
log.Println("服务器运行于: http://localhost:8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
这段代码实现了一个简单的登录接口,在用户登录成功后,生成了一个包含用户信息的 token,并返回给客户端。在实际应用中,你需要替换 jwtKey
的值,并且实现用户验证的逻辑。
评论已关闭