用golang写一个jwt登陆
时间: 2024-09-19 09:03:09 浏览: 66
golang之JWT实现的示例代码
在Go语言中,你可以使用`github.com/dgrijalva/jwt-go`库来创建和验证JWT(JSON Web Token)。JWT是一种轻量级的身份认证机制,常用于无状态的API设计中。以下是简单的步骤来创建一个JWT登录服务:
1. 首先,你需要安装`jwt-go`库:
```sh
go get github.com/dgrijalva/jwt-go
```
2. 导入必要的包:
```go
import (
"github.com/dgrijalva/jwt-go"
"net/http"
"time"
)
```
3. 创建一个私钥(可以作为环境变量存储)并初始化JWT处理器:
```go
const secretKey = "your-secret-key"
func generateToken(username string) (string, error) {
claims := jwt.MapClaims{}
claims["username"] = username
claims["exp"] = time.Now().Add(time.Hour * 24).Unix()
token, err := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(secretKey)
if err != nil {
return "", err
}
return token, nil
}
```
4. 设置一个路由处理登录请求,生成JWT并返回:
```go
func loginHandler(w http.ResponseWriter, r *http.Request) {
// 解析用户名密码等信息,这里仅做示例
username := r.FormValue("username")
password := r.FormValue("password")
// 检查用户名和密码,实际应用中应从数据库查询
if isValidCredentials(username, password) {
token, err := generateToken(username)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Write([]byte(token))
} else {
http.Error(w, "Invalid credentials", http.StatusUnauthorized)
}
}
```
5. 添加到HTTP服务器上:
```go
router.HandleFunc("/login", loginHandler).Methods("POST")
```
阅读全文