Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Golang melaksanakan pendaftaran dan log masuk

Golang melaksanakan pendaftaran dan log masuk

WBOY
WBOYasal
2023-05-10 15:20:07514semak imbas

Dalam era Internet, dengan kemajuan berterusan teknologi Internet dan permintaan orang ramai yang semakin meningkat untuk maklumat, fungsi pendaftaran dan log masuk tapak web dan APP telah menjadi semakin biasa. Artikel ini akan memperkenalkan cara menggunakan bahasa golang untuk melaksanakan fungsi pendaftaran dan log masuk.

1. Pengenalan kepada golang

Golang ialah bahasa pengaturcaraan yang dibangunkan oleh Google Ia mempunyai ciri-ciri pemprosesan serentak yang cekap, pengumpulan sampah automatik dan masa kompilasi yang sangat rendah dan ciri yang sesuai untuk sistem berskala besar. Ciri-ciri ini menjadikan golang sebagai bahasa bahagian pelayan yang sangat baik. Oleh itu, menggunakannya untuk melaksanakan fungsi pendaftaran dan log masuk adalah pilihan yang sangat baik.

2. Persediaan persekitaran

Untuk menggunakan golang untuk melaksanakan fungsi pendaftaran dan log masuk, anda perlu memasang bahasa golang dalam persekitaran setempat. Sebelum pemasangan, anda perlu menentukan jenis sistem pengendalian komputer anda (Windows, Linux, Mac, dll.), dan pilih versi golang yang sepadan untuk dimuat turun dan dipasang.

Selepas pemasangan selesai, anda boleh memasukkan arahan berikut dalam baris arahan untuk menyemak sama ada pemasangan berjaya:

go version

Jika nombor versi golang dipaparkan, pemasangan berjaya.

3. Pelaksanaan fungsi pendaftaran

  1. Buat folder projek

Buat folder bernama "log masuk" untuk meletakkan fail projek ini. Buat dua folder dalam folder ini: pengawal dan model. Antaranya, pengawal digunakan untuk meletakkan kod pengawal antara muka Web, dan model digunakan untuk meletakkan kod operasi pangkalan data.

  1. Sambungan pangkalan data dan penciptaan jadual

Buat fail bernama "db.go" dalam folder model dan tulis kod berikut di dalamnya untuk mewujudkan sambungan pangkalan data :

package model

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

const (
    USERNAME = "root"
    PASSWORD = ""
    NETWORK  = "tcp"
    SERVER   = "localhost"
    PORT     = 3306
    DATABASE = "login_system"
)

func DbConn() (db *sql.DB) {
    dbDriver := "mysql"
    dbUser := USERNAME
    dbPass := PASSWORD
    dbName := DATABASE
    db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@tcp("+SERVER+":"+strconv.Itoa(PORT)+")/"+dbName)
    if err != nil {
        fmt.Println("无法连接数据库:", err)
    } else {
        fmt.Println("成功连接数据库!")
    }
    return db
}

Dalam kod di atas, pustaka pihak ketiga "go-sql-driver/mysql" digunakan untuk merealisasikan sambungan pangkalan data. Dalam kod, kami juga perlu menetapkan beberapa maklumat asas pangkalan data, seperti nama pengguna, kata laluan, alamat hos, nombor port, nama pangkalan data, dll.

Langkah seterusnya, kita perlu mencipta fail bernama "user.sql" untuk menulis pernyataan SQL untuk mencipta jadual pengguna, yang mengandungi medan seperti ID pengguna, nama pengguna dan kata laluan.

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(40) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Dengan melaksanakan pernyataan SQL di atas, jadual pengguna boleh dibuat dalam pangkalan data.

  1. Tulis kod pengawal

Buat fail bernama "register.go" dalam folder pengawal untuk menulis kod pengawal untuk antara muka pendaftaran. Dalam fail ini, anda perlu mengimport pustaka pihak ketiga "net/http" dan tulis kod berikut:

package controller

import (
    "crypto/md5"
    "database/sql"
    "encoding/hex"
    "fmt"
    "io/ioutil"
    "net/http"
    "server/model"
)

func Register(w http.ResponseWriter, r *http.Request) {
    if r.Method == "POST" {
        username := r.FormValue("username")
        password := r.FormValue("password")
        // 密码加密
        h := md5.New()
        h.Write([]byte(password))
        password = hex.EncodeToString(h.Sum(nil))
        // 数据库操作
        db := model.DbConn()
        defer db.Close()
        stmt, err := db.Prepare("INSERT INTO user(username, password) VALUES (?, ?)")
        if err != nil {
            fmt.Println("SQL语句执行失败:", err)
            return
        }
        _, err = stmt.Exec(username, password)
        if err != nil {
            fmt.Println("用户注册失败:", err)
            return
        }
        fmt.Println("用户注册成功!")
    }
    // 返回页面内容
    data, err := ioutil.ReadFile("register.html")
    if err != nil {
        fmt.Println("读取文件失败:", err)
        return
    }
    w.Write([]byte(data))
}

Dalam kod di atas, kami mula-mula menentukan sama ada kaedah permintaan adalah POST. Jika ia adalah permintaan POST, nama pengguna dan kata laluan diperoleh, kata laluan disulitkan MD5, dan kata laluan dan nama pengguna yang disulitkan disimpan dalam pangkalan data.

Di penghujung fail, gunakan fungsi ioutil.ReadFile() untuk membaca fail bernama "register.html" dan mengembalikan kandungan fail itu kepada penyemak imbas. Dengan cara ini, penyemak imbas boleh memaparkan antara muka pendaftaran kami.

  1. Penulisan antara muka pendaftaran

Buat fail bernama "register.html" dalam folder log masuk untuk menulis kod untuk halaman pendaftaran. Dalam halaman ini, anda perlu menggunakan teg ff9c23ada1bcecdd1a0fb5d5a0f18437 dan teg d5fd7aea971a85678ba271703566ebfd untuk mendapatkan maklumat nama pengguna dan kata laluan, dan menyerahkan maklumat ini ke bahagian belakang untuk diproses. Kod khusus adalah seperti berikut:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
    <form action="/register" method="post">
        <p>用户名:<input type="text" name="username" /></p>
        <p>密码:<input type="password" name="password" /></p>
        <input type="submit" value="注册" />
    </form>
</body>
</html>

Dalam kod di atas, atribut tindakan teg f09171dd5a17ba951a950f7c55eddfd5 mewakili alamat penyerahan borang, iaitu alamat URL antara muka pendaftaran dan kaedah atribut mewakili kaedah penyerahan borang, iaitu menggunakan penyerahan kaedah POST.

  1. Mulakan pelayan

Buat fail bernama "main.go" dalam folder log masuk untuk memulakan pelayan. Dalam fail ini, anda perlu mengimport pustaka pihak ketiga "net/http" dan tulis kod berikut:

package main

import (
    "net/http"
    "login/controller"
)

func main() {
    // 注册接口路由
    http.HandleFunc("/register", controller.Register)
    // 启动服务器
    http.ListenAndServe(":8080", nil)
}

Dalam kod di atas, kami menggunakan fungsi http.HandleFunc() untuk menentukan alamat penghalaan untuk antara muka pendaftaran. Selepas program dimulakan, anda boleh mengakses "http://localhost:8080/register" melalui pelayar untuk membuka antara muka pendaftaran.

4. Pelaksanaan fungsi log masuk

  1. Tulis kod pengawal

Buat fail bernama "login.go" dalam folder pengawal Digunakan untuk menulis kod pengawal untuk antara muka log masuk. Dalam fail ini, anda perlu mengimport perpustakaan pihak ketiga "net/http" dan "database/sql" dan tulis kod berikut:

package controller

import (
    "crypto/md5"
    "database/sql"
    "encoding/hex"
    "fmt"
    "io/ioutil"
    "net/http"
    "server/model"    
)

func Login(w http.ResponseWriter, r *http.Request) {
    if r.Method == "POST" {
        username := r.FormValue("username")
        password := r.FormValue("password")
        h := md5.New()
        h.Write([]byte(password))
        password = hex.EncodeToString(h.Sum(nil))
        // 根据用户名和密码查询数据库
        db := model.DbConn()
        defer db.Close()
        rows, err := db.Query("SELECT * FROM user WHERE username=? AND password=?", username, password)
        if err != nil {
            fmt.Println("SQL语句执行失败:", err)
            return
        }
        defer rows.Close()
        if rows.Next() {
            fmt.Println("登录成功!")
            // 返回登录成功页面
            data, err := ioutil.ReadFile("success.html")
            if err != nil {
                fmt.Println("读取文件失败:", err)
                return
            }
            w.Write([]byte(data))
        } else {
            fmt.Println("用户名或密码不正确!")
            // 返回登录失败页面
            data, err := ioutil.ReadFile("fail.html")
            if err != nil {
                fmt.Println("读取文件失败:", err)
                return
            }
            w.Write([]byte(data))
        }
    }
    // 返回登录页面
    data, err := ioutil.ReadFile("login.html")
    if err != nil {
        fmt.Println("读取文件失败:", err)
        return
    }
    w.Write([]byte(data))
}

Dalam kod di atas, kami mula-mula menentukan sama ada kaedah permintaan itu POS. Jika ia adalah permintaan POST, nama pengguna dan kata laluan diperoleh, dan kata laluan disulitkan dengan MD5. Kemudian, kami menanyakan pangkalan data berdasarkan nama pengguna dan kata laluan Jika hasil pertanyaan tidak kosong, ia bermakna log masuk berjaya, jika tidak ia bermakna log masuk gagal.

Di penghujung fail, kami membaca dua lagi fail bernama "success.html" dan "fail.html", yang digunakan untuk mewakili kandungan halaman selepas berjaya dan gagal log masuk masing-masing.

  1. Tulisan antara muka log masuk

Buat fail bernama "login.html" dalam folder log masuk untuk menulis kod untuk halaman log masuk. Halaman ini adalah serupa dengan halaman pendaftaran Ia juga perlu menggunakan teg ff9c23ada1bcecdd1a0fb5d5a0f18437 dan d5fd7aea971a85678ba271703566ebfd Kod khusus adalah seperti berikut:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
    <form action="/login" method="post">
        <p>用户名:<input type="text" name="username" /></p>
        <p>密码:<input type="password" name="password" /></p>
        <input type="submit" value="登录" />
    </form>
</body>
</html>
  1. 成功和失败页面编写

在login文件夹中创建一个名为“success.html”的文件,用来编写登录成功后的页面代码。具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录成功</title>
</head>
<body>
    <h1>恭喜,登录成功!</h1>
</body>
</html>

在login文件夹中再创建一个名为“fail.html”的文件,用来编写登录失败后的页面代码。具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录失败</title>
</head>
<body>
    <h1>对不起,用户名或密码错误!</h1>
</body>
</html>
  1. 注册接口路由修改

在“main.go”文件中,将注册接口路由的地址改为“/”即可。最终代码如下:

package main

import (
    "net/http"
    "login/controller"
)

func main() {
    // 注册接口路由
    http.HandleFunc("/", controller.Register)
    // 登录接口路由
    http.HandleFunc("/login", controller.Login)
    // 启动服务器
    http.ListenAndServe(":8080", nil)
}

五、总结

本文介绍了如何使用golang语言来实现注册登录功能。通过本文的学习,我们可以看到golang语言实现简洁高效、性能优越,适合用于实现服务器端开发。同时,本文也向读者展示了如何使用golang与数据库进行交互,以及如何使用golang实现Web接口的功能。希望本文能够为读者带来一些参考和启发。

Atas ialah kandungan terperinci Golang melaksanakan pendaftaran dan log masuk. 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:golang install net httpArtikel seterusnya:golang install net http