Cara log masuk golang

WBOY
Lepaskan: 2023-05-19 11:04:37
asal
714 orang telah melayarinya

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:



<meta charset="UTF-8" />
<title>Login Page</title>
Salin selepas log masuk

< ;/ kepala>

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


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

)

taip struct Pengguna {

ID       int    `json:"id"`
Name     string `json:"name"`
Password string `json:"password"`
Salin selepas log masuk

}

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

}

func dbClose() {

db.Close()
Salin selepas log masuk

}

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

}

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

}

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

}

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

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

}

func CheckPasswordHash(kata laluan, rentetan hash) bool {

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

}

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

}

func createSession() string {

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

}

func main() {

dbSetup()
defer dbClose()

http.HandleFunc("/login", LoginHandler)

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

}

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!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan