Rumah > pembangunan bahagian belakang > Golang > Perisian Tengah Pengesahan Asas untuk Iris

Perisian Tengah Pengesahan Asas untuk Iris

Barbara Streisand
Lepaskan: 2024-11-01 18:40:29
asal
432 orang telah melayarinya

Basic Authentication Middleware for Iris

Gambaran keseluruhan

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.

Pemasangan

Untuk menggunakan middleware basicauth, anda perlu mengimportnya dalam aplikasi Iris anda:

import "github.com/kataras/iris/v12/middleware/basicauth"
Salin selepas log masuk
Salin selepas log masuk

Ciri-ciri

Fungsi Pengesahan

Inti perisian tengah ialah medan Benarkan, yang merupakan fungsi dengan tandatangan berikut:

func(ctx iris.Context, username, password string) (any, bool)
Salin selepas log masuk
Salin selepas log masuk

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.

Struktur Pengguna (Pembantu)

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"`
}
Salin selepas log masuk
Salin selepas log masuk

Storan Pengguna Dalam Memori

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{}},
}
Salin selepas log masuk

Persediaan Asas

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)
Salin selepas log masuk

Menggunakan Fail untuk Storan Pengguna

Anda boleh memuatkan pengguna daripada fail (JSON atau YAML). Ini berguna untuk aplikasi yang data pengguna kerap berubah.

auth := basicauth.Load("users.yml")
Salin selepas log masuk

Pilihan BCRYPT

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)
Salin selepas log masuk

Anda juga boleh menggunakan pilihan BCRYPT dengan kaedah pengambilan pengguna lain, seperti dalam memori atau storan pangkalan data.

Menggunakan Pangkalan Data untuk Storan Pengguna

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)
}
Salin selepas log masuk

Pengendalian Ralat Tersuai

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"})
    },
}
Salin selepas log masuk

Tamat Tempoh Sesi

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,
}
Salin selepas log masuk

Kutipan Sampah

Untuk mengosongkan pengguna yang telah tamat tempoh daripada memori, anda boleh menetapkan medan GC.

import "github.com/kataras/iris/v12/middleware/basicauth"
Salin selepas log masuk
Salin selepas log masuk

Pengendali Ujian dengan BasicAuth Middleware

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)
Salin selepas log masuk
Salin selepas log masuk

Contoh

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"`
}
Salin selepas log masuk
Salin selepas log masuk

Kesimpulan

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan