Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara melaksanakan pengesahan pengguna menggunakan bahasa Go dan Redis

Cara melaksanakan pengesahan pengguna menggunakan bahasa Go dan Redis

WBOY
WBOYasal
2023-10-26 08:27:18692semak imbas

Cara melaksanakan pengesahan pengguna menggunakan bahasa Go dan Redis

Cara menggunakan bahasa Go dan Redis untuk melaksanakan pengesahan pengguna

1. Pengenalan
Dalam aplikasi web Ia adalah pengesahan pengguna satu fungsi penting. Pengguna perlu memberikan bukti kelayakan yang sah untuk mengakses sumber tertentu atau melakukan tindakan tertentu. Bahasa Go ialah bahasa pengaturcaraan yang berkuasa, dan Redis ialah sistem storan data dalam memori yang cepat dan tersedia. Menggabungkan kedua-dua ini, kami boleh melaksanakan sistem pengesahan pengguna yang cekap.

2 Persediaan
Sebelum mula menulis kod, kita perlu memasang dan mengkonfigurasi bahasa Go dan Redis. Pastikan anda telah memasang bahasa Go dengan betul Anda boleh mengesahkan ini dengan menaip "versi go" pada baris arahan. Kemudian muat turun dan pasang Redis dan pastikan pelayan Redis dimulakan.

3. Pelaksanaan kod
Langkah 1: Import tanggungan
Pertama kita perlu mengimport pakej tanggungan yang berkaitan, termasuk github.com/go-redis/redisencoding/json. Yang pertama digunakan untuk menyambung dan mengendalikan pangkalan data Redis, dan yang terakhir digunakan untuk menukar data pengguna ke dalam format JSON untuk penyimpanan.

package main

import (
    "encoding/json"
    "fmt"
    "github.com/go-redis/redis"
)

Langkah 2: Tentukan struktur pengguna
Kita perlu menentukan struktur pengguna untuk menyimpan maklumat berkaitan pengguna. Struktur ini akan mengandungi medan seperti ID pengguna, nama pengguna dan kata laluan.

type User struct {
    ID       int
    Username string
    Password string
}

Langkah 3: Sambung ke pangkalan data Redis
Kami menggunakan perpustakaan go-redis untuk menyambung dan mengendalikan pangkalan data Redis. Pertama, kita perlu menentukan pembolehubah global untuk memegang contoh klien Redis.

var client *redis.Client

Kemudian, kami mencipta contoh klien Redis dalam fungsi utama dan menyambung ke pelayan Redis.

func main() {
    client = redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
        DB:   0,
    })

    _, err := client.Ping().Result()
    if err != nil {
        panic(err)
    }

    defer client.Close()

    // 进行用户身份验证的其他代码
}

Langkah 4: Laksanakan fungsi pendaftaran dan log masuk pengguna
Seterusnya, kami melaksanakan fungsi pendaftaran dan log masuk pengguna. Dalam contoh ini, kami menganggap bahawa nama pengguna adalah unik dan menggunakan nama pengguna sebagai Kunci Redis untuk menyimpan maklumat pengguna.

Pertama, kami mentakrifkan fungsi untuk mendaftar pengguna baharu. Fungsi ini akan menerima nama pengguna dan kata laluan sebagai parameter dan menyimpan pengguna baharu ke dalam Redis.

func register(username, password string) error {
    // 检查用户名是否已经存在
    exists, err := client.Exists(username).Result()
    if err != nil {
        return err
    }

    if exists {
        return fmt.Errorf("Username already exists")
    }

    // 创建新用户
    user := User{
        ID:       generateUserID(),
        Username: username,
        Password: password,
    }

    // 将用户信息转换为JSON格式
    userJSON, err := json.Marshal(user)
    if err != nil {
        return err
    }

    // 将用户信息存储到Redis中
    err = client.Set(user.Username, userJSON, 0).Err()
    if err != nil {
        return err
    }

    return nil
}

Kemudian, kami mentakrifkan fungsi untuk mengesahkan log masuk pengguna. Fungsi ini akan menerima nama pengguna dan kata laluan sebagai parameter dan mendapatkan maklumat pengguna daripada Redis untuk perbandingan.

func login(username, password string) error {
    // 获取用户信息
    userJSON, err := client.Get(username).Result()
    if err != nil {
        return err
    }

    // 将用户信息解析为User结构体
    var user User
    err = json.Unmarshal([]byte(userJSON), &user)
    if err != nil {
        return err
    }

    // 验证密码
    if user.Password != password {
        return fmt.Errorf("Incorrect password")
    }

    // 用户登录成功
    fmt.Println("Login successful")

    return nil
}

Langkah 5: Uji fungsi
Akhir sekali, kami menguji fungsi pendaftaran dan log masuk dalam fungsi utama.

func main() {
    client = redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
        DB:   0,
    })

    _, err := client.Ping().Result()
    if err != nil {
        panic(err)
    }

    defer client.Close()

    // 注册新用户
    err = register("admin", "admin123")
    if err != nil {
        panic(err)
    }

    // 验证注册用户的登录信息
    err = login("admin", "admin123")
    if err != nil {
        panic(err)
    }
}

Dengan cara ini, kami telah melengkapkan kod untuk pengesahan pengguna menggunakan bahasa Go dan Redis.

4. Ringkasan
Dengan menggabungkan bahasa Go dan Redis, kami boleh melaksanakan sistem pengesahan pengguna yang cekap. Dalam artikel ini, kami memperkenalkan cara menggunakan perpustakaan go-redis untuk menyambung dan mengendalikan pangkalan data Redis, dan cara membuat pendaftaran pengguna dan fungsi log masuk. Ini hanyalah contoh mudah, anda boleh mengubah suai dan memanjangkannya mengikut keperluan sebenar anda.

Nota: Dalam persekitaran pengeluaran sebenar, atas sebab keselamatan, kata laluan pengguna harus disimpan sebagai nilai cincang dan bukannya teks biasa. Apabila mengesahkan log masuk, kata laluan yang dimasukkan oleh pengguna dicincang dan dibandingkan dengan nilai cincang yang disimpan. Selain itu, kami juga boleh menggunakan teknologi dan strategi lain untuk meningkatkan keselamatan pengesahan pengguna, seperti menggunakan JSON Web Token (JWT) untuk mengurus token akses pengguna.

Pautan rujukan:

  • dokumentasi perpustakaan go-redis: https://pkg.go.dev/github.com/go-redis/redis#🎜 🎜#
  • Go language official website: https://golang.org/
  • Redis official website: https://redis.io/

Atas ialah kandungan terperinci Cara melaksanakan pengesahan pengguna menggunakan bahasa Go dan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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