ZBLOG

go-zero框架的 jwt-go api编译

要在 Go 中使用 go-zero 框架与 jwt-go 创建一个 API 并进行编译,以下是详细的步骤:

1. 环境准备

确保你已经安装了 Go 环境。你可以通过命令检查:

  1. go version

如果未安装,可以前往 Go 官方网站 下载并安装。

2. 创建项目目录

首先,创建一个新的项目目录并进入其中:

  1. mkdir go-zero-jwt-example
  2. cd go-zero-jwt-example

3. 初始化 Go 模块

初始化你的 Go 项目:

  1. go mod init go-zero-jwt-example

4. 安装依赖

安装 go-zerojwt-go 库:

  1. go get github.com/zeromicro/go-zero@latest
  2. go get github.com/dgrijalva/jwt-go@latest

5. 编写代码

在项目目录下,创建一个新的 Go 文件(如 main.go),并添加如下代码来实现 JWT 身份验证的基本功能:

  1. package main
  2. import (
  3. "net/http"
  4. "strings"
  5. "github.com/dgrijalva/jwt-go"
  6. "github.com/zeromicro/go-zero/rest"
  7. )
  8. var jwtSecret = []byte("your_secret_key") // 请替换为更强的密钥
  9. // User structure for demonstration purpose.
  10. type User struct {
  11. Username string `json:"username"`
  12. }
  13. // GenerateJWT generates a new JWT token.
  14. func GenerateJWT(username string) (string, error) {
  15. claims := jwt.MapClaims{
  16. "username": username,
  17. "exp": jwt.At(time.Now().Add(time.Hour * 72).Unix()),
  18. }
  19. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  20. return token.SignedString(jwtSecret)
  21. }
  22. func loginHandler(w http.ResponseWriter, r *http.Request) {
  23. username := r.FormValue("username")
  24. // Here you should validate the username and password against your database.
  25. token, err := GenerateJWT(username)
  26. if err != nil {
  27. http.Error(w, "Could not generate token", http.StatusInternalServerError)
  28. return
  29. }
  30. w.Write([]byte(token))
  31. }
  32. func protectedHandler(w http.ResponseWriter, r *http.Request) {
  33. tokenStr := r.Header.Get("Authorization")
  34. if !strings.HasPrefix(tokenStr, "Bearer ") {
  35. http.Error(w, "Unauthorized", http.StatusUnauthorized)
  36. return
  37. }
  38. tokenStr = strings.TrimPrefix(tokenStr, "Bearer ")
  39. _, err := jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) {
  40. return jwtSecret, nil
  41. })
  42. if err != nil || !token.Valid {
  43. http.Error(w, "Invalid token", http.StatusUnauthorized)
  44. return
  45. }
  46. w.Write([]byte("Welcome to the protected route!"))
  47. }
  48. func main() {
  49. r := rest.NewServer()
  50. defer r.Stop()
  51. r.POST("/login", loginHandler)
  52. r.GET("/protected", protectedHandler)
  53. r.Start()
  54. }

6. 编译和运行应用程序

保存文件后,你可以使用以下命令来编译并运行应用程序:

  1. go run main.go

或者,如果你想生成二进制文件,可以执行:

  1. go build -o myapp .
  2. ./myapp # 在 Unix/Linux 系统上运行;Windows 上直接运行 myapp.exe。

7. 测试 API

登录以获取 Token:

使用 cURL 或 Postman 等工具发送请求以获取 JWT。

示例 cURL 命令

  1. curl -X POST -d 'username=your_username' http://localhost:8080/login

使用 Token 访问保护资源:

将返回的 Token 用于访问受保护的资源。

示例 cURL 命令

  1. curl -H 'Authorization: Bearer <your_token>' http://localhost:8080/protected

确保替换 <your_token> 为实际返回的 JWT。

注意事项

  • 安全性:请勿在生产环境中硬编码密钥,应从安全配置源(如环境变量)读取。
  • 用户管理:该示例没有包含用户注册和密码加密等功能,这在实际应用中是必要的。
  • 错误处理:请根据需求扩展错误处理逻辑,以增强用户体验。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22336

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?