基本驗證中間件提供了一種強大且靈活的方式來保護您的 Iris Web 應用程式。它支援各種用戶儲存方法,包括記憶體列表、檔案和資料庫,並提供密碼加密、自訂錯誤處理和會話過期等高級功能。
要使用 basicauth 中間件,您需要將其匯入 Iris 應用程式:
import "github.com/kataras/iris/v12/middleware/basicauth"
中間件的核心是Allow字段,它是一個函數,其簽名如下:
func(ctx iris.Context, username, password string) (any, bool)
此函數負責驗證使用者名稱和密碼。它會傳回一個使用者物件(或任何其他類型)和一個指示身份驗證是否成功的布林值。
雖然中間件不需要特定的使用者結構,但您可以使用輔助結構來更方便地管理使用者資料。這是使用者結構的範例:
type User struct { Username string `json:"username"` Password string `json:"password"` Roles []string `json:"roles"` }
您可以使用使用者結構切片將使用者儲存在記憶體中。這對於小型應用程式或測試目的很有用。
var users = []User{ {"admin", "admin", []string{"admin"}}, {"kataras", "kataras_pass", []string{"manager", "author"}}, {"george", "george_pass", []string{"member"}}, {"john", "john_pass", []string{}}, }
要設定中間件,請建立 basicauth.Options 的實例並將其傳遞給 basicauth.New。
opts := basicauth.Options{ Realm: basicauth.DefaultRealm, MaxAge: 10 * time.Minute, GC: basicauth.GC{ Every: 2 * time.Hour, }, Allow: basicauth.AllowUsers(users), } auth := basicauth.New(opts)
您可以從檔案(JSON 或 YAML)載入使用者。這對於用戶資料頻繁更改的應用程式非常有用。
auth := basicauth.Load("users.yml")
BCRYPT 選項可讓您使用 bcrypt 進行密碼雜湊。 Bcrypt 是一種密碼雜湊函數,旨在計算密集型以抵禦暴力攻擊。它廣泛用於安全存儲密碼。
auth := basicauth.Load("users.yml", basicauth.BCRYPT)
您也可以將 BCRYPT 選項與其他使用者取得方法一起使用,例如記憶體或資料庫儲存。
為了進行更動態的使用者管理,您可以根據資料庫驗證使用者。以下是如何使用 MySQL 資料庫設定中間件的範例:
package main import ( "context" "database/sql" "fmt" "os" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/basicauth" _ "github.com/go-sql-driver/mysql" ) type User struct { ID int64 `db:"id" json:"id"` Username string `db:"username" json:"username"` Password string `db:"password" json:"password"` Email string `db:"email" json:"email"` } func (u User) GetUsername() string { return u.Username } func (u User) GetPassword() string { return u.Password } func main() { dsn := fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?parseTime=true&charset=utf8mb4&collation=utf8mb4_unicode_ci", getenv("MYSQL_USER", "user_myapp"), getenv("MYSQL_PASSWORD", "dbpassword"), get env("MYSQL_HOST", "localhost"), getenv("MYSQL_DATABASE", "myapp"), ) db, err := connect(dsn) if err != nil { panic(err) } // Validate a user from database. allowFunc := func(ctx iris.Context, username, password string) (any, bool) { user, err := db.getUserByUsernameAndPassword(context.Background(), username, password) return user, err == nil } opts := basicauth.Options{ Realm: basicauth.DefaultRealm, ErrorHandler: basicauth.DefaultErrorHandler, Allow: allowFunc, } auth := basicauth.New(opts) app := iris.New() app.Use(auth) app.Get("/", index) app.Listen(":8080") } func index(ctx iris.Context) { user, _ := ctx.User().GetRaw() // user is a type of main.User ctx.JSON(user) }
您可以透過設定 basicauth.Options 中的 ErrorHandler 欄位來自訂錯誤處理行為。
opts := basicauth.Options{ ErrorHandler: func(ctx iris.Context, err error) { ctx.StatusCode(iris.StatusUnauthorized) ctx.JSON(iris.Map{"error": "Unauthorized"}) }, }
中間件支援會話過期。您可以設定 MaxAge 欄位來指定使用者必須重新進行身份驗證的持續時間。
opts := basicauth.Options{ MaxAge: 10 * time.Minute, }
要從記憶體中清除過期用戶,您可以設定 GC 欄位。
import "github.com/kataras/iris/v12/middleware/basicauth"
要測試使用 BasicAuth 中間件的處理程序,您可以使用
http測驗
Iris 提供的套餐。以下是如何測試處理程序的範例:
func(ctx iris.Context, username, password string) (any, bool)
這是一個完整的範例,示範如何使用記憶體使用者儲存設定中間件:
type User struct { Username string `json:"username"` Password string `json:"password"` Roles []string `json:"roles"` }
基本驗證中間件提供了一個全面的解決方案來保護您的 Iris Web 應用程式。它支援各種用戶儲存方法、密碼加密和自訂錯誤處理等高級功能,並且易於集成,是開發人員的強大工具。
以上是Iris 基本驗證中介軟體的詳細內容。更多資訊請關注PHP中文網其他相關文章!