Perisian tengah Pengesahan Asas menyediakan cara yang teguh dan fleksibel untuk melindungi aplikasi web Iris anda. Ia menyokong pelbagai kaedah storan pengguna, termasuk senarai dalam memori, fail dan pangkalan data, serta menawarkan ciri lanjutan seperti penyulitan kata laluan, pengendalian ralat tersuai dan tamat tempoh sesi.
Untuk menggunakan middleware basicauth, anda perlu mengimportnya dalam aplikasi Iris anda:
import "github.com/kataras/iris/v12/middleware/basicauth"
Inti perisian tengah ialah medan Benarkan, yang merupakan fungsi dengan tandatangan berikut:
func(ctx iris.Context, username, password string) (any, bool)
Fungsi ini bertanggungjawab untuk mengesahkan nama pengguna dan kata laluan. Ia mengembalikan objek pengguna (atau apa-apa jenis lain) dan boolean yang menunjukkan sama ada pengesahan berjaya.
Walaupun perisian tengah tidak memerlukan struktur pengguna tertentu, anda boleh menggunakan struktur pembantu untuk mengurus data pengguna dengan lebih mudah. Berikut ialah contoh struktur pengguna:
type User struct { Username string `json:"username"` Password string `json:"password"` Roles []string `json:"roles"` }
Anda boleh menyimpan pengguna dalam ingatan menggunakan sekeping struktur pengguna. Ini berguna untuk aplikasi kecil atau tujuan ujian.
var users = []User{ {"admin", "admin", []string{"admin"}}, {"kataras", "kataras_pass", []string{"manager", "author"}}, {"george", "george_pass", []string{"member"}}, {"john", "john_pass", []string{}}, }
Untuk menyediakan perisian tengah, buat instance of basicauth.Options dan hantarkannya ke 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)
Anda boleh memuatkan pengguna daripada fail (JSON atau YAML). Ini berguna untuk aplikasi yang data pengguna kerap berubah.
auth := basicauth.Load("users.yml")
Pilihan BCRYPT membolehkan anda menggunakan bcrypt untuk pencincangan kata laluan. Bcrypt ialah fungsi pencincangan kata laluan yang direka bentuk secara intensif secara pengiraan untuk menentang serangan kekerasan. Ia digunakan secara meluas untuk menyimpan kata laluan dengan selamat.
auth := basicauth.Load("users.yml", basicauth.BCRYPT)
Anda juga boleh menggunakan pilihan BCRYPT dengan kaedah pengambilan pengguna lain, seperti dalam memori atau storan pangkalan data.
Untuk pengurusan pengguna yang lebih dinamik, anda boleh mengesahkan pengguna terhadap pangkalan data. Berikut ialah contoh cara menyediakan perisian tengah menggunakan pangkalan data 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) }
Anda boleh menyesuaikan tingkah laku pengendalian ralat dengan menetapkan medan ErrorHandler dalam basicauth.Options.
opts := basicauth.Options{ ErrorHandler: func(ctx iris.Context, err error) { ctx.StatusCode(iris.StatusUnauthorized) ctx.JSON(iris.Map{"error": "Unauthorized"}) }, }
Perisian tengah menyokong tamat tempoh sesi. Anda boleh menetapkan medan MaxAge untuk menentukan tempoh selepas itu pengguna mesti mengesahkan semula.
opts := basicauth.Options{ MaxAge: 10 * time.Minute, }
Untuk mengosongkan pengguna yang telah tamat tempoh daripada memori, anda boleh menetapkan medan GC.
import "github.com/kataras/iris/v12/middleware/basicauth"
Untuk menguji pengendali yang menggunakan perisian tengah BasicAuth, anda boleh menggunakan
httptest
pakej disediakan oleh Iris. Berikut ialah contoh cara menguji pengendali:
func(ctx iris.Context, username, password string) (any, bool)
Berikut ialah contoh lengkap yang menunjukkan cara menyediakan perisian tengah dengan storan pengguna dalam memori:
type User struct { Username string `json:"username"` Password string `json:"password"` Roles []string `json:"roles"` }
Perisian tengah Pengesahan Asas menyediakan penyelesaian yang komprehensif untuk melindungi aplikasi web Iris anda. Dengan sokongan untuk pelbagai kaedah storan pengguna, ciri lanjutan seperti penyulitan kata laluan dan pengendalian ralat tersuai serta penyepaduan yang mudah, ia merupakan alat yang berkuasa untuk pembangun.
Atas ialah kandungan terperinci Perisian Tengah Pengesahan Asas untuk Iris. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!