Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara log masuk golang

Cara log masuk golang

WBOY
WBOYasal
2023-05-19 11:04:37665semak imbas

Cara untuk log masuk dengan Golang

Golang ialah bahasa pengaturcaraan sumber terbuka yang dilancarkan oleh Google pada tahun 2009. Golang digunakan secara meluas dalam pembangunan bahagian belakang, pengkomputeran awan dan bidang lain kerana kelebihannya seperti kecekapan, kebolehpercayaan dan penyelenggaraan yang mudah. Dalam pembangunan Golang, kerana keperluan untuk melaksanakan log masuk pengguna dan fungsi lain, cara melaksanakan log masuk pengguna di Golang telah menjadi isu penting. Artikel ini akan memperkenalkan cara melaksanakan log masuk pengguna di Golang.

1. Prinsip log masuk pengguna di Golang

Untuk melaksanakan fungsi log masuk pengguna, maklumat pengguna, seperti nama pengguna, kata laluan, dan lain-lain, perlu disimpan di bahagian pelayan. Apabila pengguna memasukkan nama pengguna dan kata laluan, pelayan perlu mengesahkan input pengguna Jika perlawanan berjaya, pelayan akan mengembalikan maklumat kejayaan pengesahan kepada pengguna dan menyimpan status log masuk pengguna di bahagian pelayan. Status log masuk boleh disimpan dalam bentuk kuki atau sesi, supaya pelayan boleh mengenal pasti pengguna pada kali berikutnya dia melawat dan mengembalikan data yang sepadan.

2. Langkah untuk melaksanakan log masuk pengguna di Golang

Untuk melaksanakan log masuk pengguna di Golang, anda perlu melengkapkan langkah berikut:

  1. Buat jadual pangkalan data

Buat jadual pengguna dalam pangkalan data untuk menyimpan maklumat pengguna seperti nama pengguna dan kata laluan, seperti yang ditunjukkan di bawah:

BUAT pengguna JADUAL (
ID int NOT NULL AUTO_INCREMENT,
Nama varchar( 20) BUKAN NULL,
Kata laluan varchar(50) BUKAN NULL,
KUNCI UTAMA (ID)
);

  1. Tulis halaman log masuk

Di halaman hadapan, kotak input untuk nama pengguna dan kata laluan perlu disediakan Selepas pengguna memasukkan akaun dan kata laluannya, klik butang log masuk, dan permintaan akan dihantar ke pelayan. Permintaan itu perlu memasukkan maklumat akaun dan kata laluan yang dimasukkan oleh pengguna.

  1. Tulis antara muka Golang

Selepas menerima permintaan dari halaman hujung hadapan, pelayan perlu menulis antara muka yang sepadan untuk menerima dan memproses permintaan. Langkah-langkah pemprosesan adalah seperti berikut:

(1) Dapatkan maklumat nama pengguna dan kata laluan yang dibawa dalam permintaan.

(2) Sambungkan ke pangkalan data dan sahkan nama pengguna dan kata laluan yang dimasukkan oleh pengguna. Jika nama pengguna dan kata laluan berjaya dipadankan, maklumat pengesahan yang berjaya dikembalikan dan maklumat pengguna yang ditemui disimpan pada pelayan.

(3) Kembalikan maklumat status log masuk ke bahagian hadapan.

  1. Simpan status log masuk

Di Golang, status log masuk pengguna boleh disimpan melalui mekanisme sesi atau kuki. Sesi ialah beberapa maklumat yang disimpan di bahagian pelayan, dan kuki ialah beberapa maklumat yang disimpan di bahagian klien. Apabila pengguna berjaya log masuk, pelayan boleh menyimpan maklumat pengguna dalam sesi dan menyimpan maklumat pengenalan sesi dalam kuki supaya pelayan boleh mengenal pasti pengguna pada kali berikutnya dia melawat.

  1. Isu keselamatan maklumat pengguna

Semasa proses log masuk pengguna, keselamatan maklumat pengguna perlu dipastikan. Kata laluan pengguna perlu disulitkan. Di Golang, algoritma bcrypt boleh digunakan untuk menyulitkan kata laluan. Algoritma penyulitan bcrypt ialah algoritma pencincangan selamat yang berulang kali mencincang kata laluan dalam berbilang pusingan, dengan itu meningkatkan keselamatan kata laluan.

3. Contoh pelaksanaan log masuk pengguna di Golang

Berikut ialah contoh mudah yang menunjukkan cara melaksanakan log masuk pengguna di Golang.

  1. Buat jadual pengguna

Laksanakan pernyataan SQL berikut dalam MySQL:

CIPTA pengguna JADUAL (
ID int NOT NULL AUTO_INCREMENT,
Namakan varchar(20) NOT NULL,
Kata laluan varchar(100) NOT NULL,
KUNCI UTAMA (ID)
);

  1. Tulis halaman log masuk

Dalam fail HTML, anda boleh menulis kod berikut:

8b05045a5be5764f313ed5b9168a17e6
100db36a723c770d327fc0aef2ce13b1
93f0f5c25f18dab9d176bd4f6de5d30e

<meta charset="UTF-8" />
<title>Login Page</title>

< ;/ kepala>
3c30aa6c4c72dd8ead30672a51b803a7

<h1>Login Page</h1>
<form action="/login" method="POST">
  <label for="username">Username:</label>
  <input type="text" id="username" name="username" /><br />
  <label for="password">Password:</label>
  <input type="password" id="password" name="password" /><br />
  <input type="submit" name="submit" value="Login" />
</form>

493a3ce9d2a3c91fa60924ecf20a1e6a
73a6ac4ed44ffec12cee46588e518a5e

  1. Tulis kod Golang

Kod Golang adalah seperti berikut:

pakej utama

import (

"crypto/rand"
"database/sql"
"fmt"
"html/template"
"log"
"net/http"
"strings"
"time"

"golang.org/x/crypto/bcrypt"

_ "github.com/go-sql-driver/mysql"

)

taip struct Pengguna {

ID       int    `json:"id"`
Name     string `json:"name"`
Password string `json:"password"`

}

var db *sql.DB

func dbSetup() {

var err error
db, err = sql.Open("mysql",
    "username:password@tcp(localhost:3306)/dbname")
if err != nil {
    log.Fatal(err)
}

}

func dbClose() {

db.Close()

}

func UserExists(rentetan nama pengguna) bool {

var count int
stmt := "SELECT COUNT(*) FROM users WHERE Name = ?"
row := db.QueryRow(stmt, username)
err := row.Scan(&count)
if err != nil {
    log.Fatal(err)
}
return count > 0

}

func AddUser(user User) {

stmt := "INSERT INTO users(Name, Password) VALUES(?, ?)"
_, err := db.Exec(stmt, user.Name, user.Password)
if err != nil {
    log.Fatal(err)
}

}

func GetUserByUsername( rentetan nama pengguna) (Pengguna, ralat) {

var user User
stmt := "SELECT ID, Name, Password FROM users WHERE Name = ?"
row := db.QueryRow(stmt, username)
err := row.Scan(&user.ID, &user.Name, &user.Password)
switch {
case err == sql.ErrNoRows:
    return User{}, fmt.Errorf("No user with username %s", username)
case err != nil:
    return User{}, err
}
return user, nil

}

func HashPassword(rentetan kata laluan) (rentetan, ralat) {

bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
return string(bytes), err

}

func CheckPasswordHash(kata laluan, rentetan hash) bool {

err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
return err == nil

}

func LoginHandler(w http.ResponseWriter, r *http.Request) {

if r.Method == "GET" {
    t, _ := template.ParseFiles("login.html")
    t.Execute(w, nil)
} else {
    r.ParseForm()
    username := strings.TrimSpace(r.Form.Get("username"))
    password := strings.TrimSpace(r.Form.Get("password"))

    if !UserExists(username) {
        http.Error(w, "User not found.", http.StatusUnauthorized)
        return
    }

    user, err := GetUserByUsername(username)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    if !CheckPasswordHash(password, user.Password) {
        http.Error(w, "Invalid credentials.", http.StatusUnauthorized)
        return
    }

    sessionID := createSession()
    cookie := &http.Cookie{
        Name:     "sessionid",
        Value:    sessionID,
        Path:     "/",
        Expires:  time.Now().Add(time.Hour * 24 * 7),
        HttpOnly: true,
    }
    http.SetCookie(w, cookie)

    fmt.Fprintf(w, "Welcome, %s!", user.Name)
}

}

func createSession() string {

b := make([]byte, 16)
_, err := rand.Read(b)
if err != nil {
    log.Fatal(err)
}
return fmt.Sprintf("%x", b)

}

func main() {

dbSetup()
defer dbClose()

http.HandleFunc("/login", LoginHandler)

log.Fatal(http.ListenAndServe(":8080", nil))

}

Kod di atas melaksanakan pengguna fungsi log masuk. Logiknya terutamanya termasuk langkah-langkah seperti menentukan sama ada pengguna wujud, mengesahkan kata laluan, menjana ID sesi dan mencipta kuki. Untuk pelaksanaan khusus, sila rujuk ulasan dalam kod.

4. Ringkasan

Untuk melaksanakan fungsi log masuk pengguna di Golang, langkah utama yang perlu diselesaikan termasuk membuat jadual pengguna, menulis halaman log masuk, menulis antara muka Golang, menyimpan log masuk status dan memastikan keselamatan maklumat pengguna. Semasa proses pelaksanaan, perhatian perlu diberikan kepada keselamatan maklumat pengguna. Artikel ini menggunakan contoh mudah untuk memperkenalkan cara melaksanakan fungsi log masuk pengguna di Golang Atas dasar ini, pembaca boleh mengembangkan untuk melaksanakan fungsi yang lebih kompleks.

Atas ialah kandungan terperinci Cara log masuk golang. 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
Artikel sebelumnya:Cara golang ginArtikel seterusnya:Cara golang gin