我一直在研究 Go,具體的說應該是一直在研究 gin 。我的 pet 項目需要一個快速而粗糙的身份認證。
通常我不會建議使用 HTTP / basic auth 來保護資源,但對于這個項目,我沒有數據庫,我只是在這里和那里提供一些 markdown 文件。所以我這里會采用 HTTP / basic auth 來做身份認證。
gin 是我最喜歡的 web 框架之一,因為它有很多非??岬闹虚g件,它有點像 node.js 的express 框架 或 hapijs。
如果你在 go/src 目錄下創建了一個 gin-http-auth 的項目,在項目的 main.go 文件里添加的的內容如下:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello World!",
})
})
r.Run() //監聽 0.0.0.0:8080
}接著在你的終端上運行 go get 命令,你的項目就開始運行了! 您現在需要通過運行以下命令啟動剛出爐的 JSON API:
go run main.go
你可以在你的瀏覽器中輸入 localhost:8080,應該可以看到 「message:Hello World !」
注意:提供 API 可能是 gin 的更大應用場景之一,但是你也可以直接渲染一系列模板。
用 Gin 框架來實現路由保護
假設你現在有一個 secret 的方法,你不希望所有人通過 url 訪問的到,這是一個特殊的燒烤醬配方或一封含有一些不可告人的細節的的情書!
我們需要設置一些示例用戶帳戶并創建一個 secret 的路由,當然我們也可以設置一個默認的路由 /。
讓我們來看看這個最小可行的例子:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Hello World!",
})
})
authorized := r.Group("/", gin.BasicAuth(gin.Accounts{
"user1": "love",
"user2": "god",
"user3": "sex",
}))
authorized.GET("/secret", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"secret": "The secret ingredient to the BBQ sauce is stiring it in an old whiskey barrel.",
})
})
r.Run() // 監聽服務在 0.0.0.0:8080
}import 中多導入了一個 net/http 包, 用于格式化 http 響應的狀態碼。authorized.GET 只允許用戶輸入正確的組合。 它就像普通的路由器功能一樣,但它需要身份驗證當您更改文件內容時,請按「CTRL + C」以快速運行 Gin 框架的實例并重新啟動它.
當你在你的瀏覽器中訪問 localhost:8080/secret,你應該看到一個窗口提示你輸入用戶名和密碼。
如果你正確輸入的賬戶和密碼,你將看到以下輸出:
secret "The secret ingredient to the BBQ sauce is stiring it in an old whiskey barrel."
就這樣已經搞定了! 你在 Go web 項目中創造了一個需要 http basic auth 的路由!
以上就是Gin中實現HTTP和Basic Auth的方法,詳細使用情況還需要大家自己親自動手使用過才能領會。如果想了解更多相關內容,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。