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:
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)
);
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.
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.
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.
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.
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)
);
Dalam fail HTML, anda boleh menulis kod berikut:
<meta charset="UTF-8" /> <title>Login Page</title>
< ;/ 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>
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!