问题内容 我正在学习使用带有 gin 框架的中间件,但我遇到了一个问题 我希望我的 test 函数 仅在满足我的 func tokenauthmiddleware 的要求时才显示在
我正在学习使用带有 gin 框架的中间件,但我遇到了一个问题
我希望我的 test 函数
仅在满足我的 func tokenauthmiddleware
的要求时才显示在 postman 中
但是无论我的正文是否填写,我的测试函数都会被调用(有或没有身份验证)如何解决这个问题? 我希望我的测试函数仅在经过中间层后才显示
我尝试过这样的事情:
package main
import (
"log"
"net/Http"
"os"
"GitHub.com/gin-Gonic/gin"
"github.com/joho/godotenv"
)
func TokenAuthMiddleware() gin.HandlerFunc {
err := godotenv.Load(".env")
if err != nil {
log.Fatal("Erro ao ler variaveis de ambiente")
}
requiredToken := os.Getenv("api_TOKEN")
if requiredToken == "" {
log.Fatal("Por favor, defina a variavel API_TOKEN")
}
return func(c *gin.Context) {
token := c.Request.FORMValue("api_token")
if token == "" {
c.JSON(http.StatusBadRequest, gin.H{"message": "Token deve ser preenchido"})
} else if token != requiredToken {
c.jsON(http.StatusBadRequest, gin.H{"message": "Token invalido"})
}
c.Next()
}
}
func Teste(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"sucess": "so beautiful",
})
}
func main() {
api := gin.New()
v1 := api.Group("v1")
v1.Use(TokenAuthMiddleware())
v1.GET("/", Teste)
api.Run()
}
提前非常感谢
您总是调用 c.next()
,它会继续处理中间件链或执行处理程序。当令牌不正确时,您需要避免调用它。
func TokenAuthMiddleware() gin.HandlerFunc {
err := godotenv.Load(".env")
if err != nil {
log.Fatal("Erro ao ler variaveis de ambiente")
}
requiredToken := os.Getenv("API_TOKEN")
if requiredToken == "" {
log.Fatal("Por favor, defina a variavel API_TOKEN")
}
return func(c *gin.Context) {
token := c.Request.FormValue("api_token")
if token == "" {
c.JSON(http.StatusBadRequest, gin.H{"message": "Token deve ser preenchido"})
return
}
if token != requiredToken {
c.JSON(http.StatusBadRequest, gin.H{"message": "Token invalido"})
return
}
c.Next()
}
}
以上就是如何使用中间件进行授权 - gin gonic go的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: 如何使用中间件进行授权 - gin gonic go
本文链接: https://www.lsjlt.com/news/561079.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0