ホームページ  >  記事  >  バックエンド開発  >  Golang は登録とログインを実装します

Golang は登録とログインを実装します

WBOY
WBOYオリジナル
2023-05-10 15:20:07550ブラウズ

インターネット時代では、インターネット技術の継続的な進歩と人々の情報への需要の増大に伴い、Web サイトや APP の登録およびログイン機能がますます一般的になりました。この記事では、golang言語を使用して登録・ログイン機能を実装する方法を紹介します。

1. golang の概要

Golang は Google によって開発されたプログラミング言語であり、効率的な同時処理、自動ガベージ コレクション、および非常に短いコンパイル時間という特徴があり、自然な同時実行機能を備えています。大規模システムに適した機能を備えています。これらの機能により、golang は非常に優れたサーバーサイド言語になります。したがって、これを使用して登録およびログイン機能を実装することは非常に良い選択です。

2. 環境設定

golang を使用して登録およびログイン機能を実装するには、まずローカル環境に golang 言語をインストールする必要があります。インストールする前に、コンピュータのオペレーティング システムの種類 (Windows、Linux、Mac など) を確認し、ダウンロードしてインストールする対応する golang バージョンを選択する必要があります。

インストールが完了したら、コマンド ラインに次のコマンドを入力して、インストールが成功したかどうかを確認できます。

go version

golang のバージョン番号が表示されれば、インストールは成功しています。 。

3. 登録機能の実装

  1. プロジェクトフォルダーの作成

このプロジェクトドキュメントを配置する「login」という名前のフォルダーを作成します。このフォルダー内にコントローラーとモデルの 2 つのフォルダーを作成します。このうち、controllerはWebインターフェースのコントローラーコードを配置するために使用され、modelはデータベース操作のコードを配置するために使用されます。

  1. データベース接続とテーブルの作成

モデル フォルダーに「db.go」という名前のファイルを作成し、その中に次のコードを記述してデータベース接続を確立します。

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
}

上記のコードでは、データベース接続を実現するためにサードパーティのライブラリ「go-sql-driver/mysql」が使用されています。コードでは、ユーザー名、パスワード、ホスト アドレス、ポート番号、データベース名など、データベースのいくつかの基本情報も設定する必要があります。

次のステップでは、「user.sql」という名前のファイルを作成して、ユーザー ID、ユーザー名、パスワードなどのフィールドを含むユーザー テーブルを作成する SQL ステートメントを記述する必要があります。

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;

上記のSQL文を実行すると、データベースにユーザーテーブルが作成されます。

  1. コントローラー コードの書き込み

コントローラー フォルダーに「register.go」という名前のファイルを作成し、登録インターフェイスのコントローラー コードを書き込みます。このファイルでは、サードパーティ ライブラリ「net/http」をインポートし、次のコードを記述する必要があります。

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))
}

上記のコードでは、最初にリクエスト メソッドが POST であるかどうかを判断します。 POST リクエストの場合、ユーザー名とパスワードが取得され、パスワードは MD5 で暗号化され、暗号化されたパスワードとユーザー名がデータベースに保存されます。

ファイルの最後で、ioutil.ReadFile() 関数を使用して「register.html」という名前のファイルを読み取り、ファイルの内容をブラウザに返します。このようにして、ブラウザは登録インターフェイスを表示できます。

  1. 登録インターフェイスの記述

ログイン フォルダーに「register.html」という名前のファイルを作成し、登録ページのコードを記述します。このページでは、ff9c23ada1bcecdd1a0fb5d5a0f18437 タグと d5fd7aea971a85678ba271703566ebfd タグを使用してユーザー名とパスワードの情報を取得し、この情報を処理のためにバックエンドに送信する必要があります。具体的なコードは次のとおりです:

<!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>

上記のコードでは、ff9c23ada1bcecdd1a0fb5d5a0f18437 タグの action 属性は、フォームの送信アドレス (登録インターフェイスの URL アドレス) とメソッドを表します。属性はフォームの送信メソッド、つまり POST メソッド送信を使用することを表します。

  1. サーバーの起動

ログインフォルダーに「main.go」という名前のファイルを作成し、サーバーを起動します。このファイルでは、サードパーティ ライブラリ「net/http」をインポートし、次のコードを記述する必要があります:

package main

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

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

上記のコードでは、http.HandleFunc() 関数を使用してルーティング アドレスを指定します。登録インターフェイス用。プログラムが起動したら、ブラウザから「http://localhost:8080/register」にアクセスし、登録インターフェイスを開くことができます。

4. ログイン関数の実装

  1. コントローラーコードの書き込み

コントローラーフォルダーに「login.go」という名前のファイルを作成します。ログインインターフェイスのコード。このファイルでは、サードパーティ ライブラリ「net/http」と「database/sql」をインポートし、次のコードを記述する必要があります。

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))
}

上記のコードでは、最初にリクエスト メソッドが役職。 POST リクエストの場合、ユーザー名とパスワードが取得され、パスワードは MD5 で暗号化されます。次に、ユーザー名とパスワードに基づいてデータベースにクエリを実行します。クエリ結果が空でない場合はログインが成功したことを意味し、空でない場合はログインが失敗したことを意味します。

ファイルの最後には、「success.html」と「fail.html」という名前のさらに 2 つのファイルが読み込まれます。これらは、それぞれログイン成功と失敗後のページ コンテンツを表すために使用されます。

  1. ログイン インターフェースの記述

ログイン フォルダーに「login.html」という名前のファイルを作成し、ログイン ページのコードを記述します。このページは登録ページに似ていますが、ff9c23ada1bcecdd1a0fb5d5a0f18437 タグと d5fd7aea971a85678ba271703566ebfd タグを使用してユーザー名とパスワードの情報を取得し、この情報を処理のためにバックエンドに送信する必要があります。具体的なコードは次のとおりです:

<!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接口的功能。希望本文能够为读者带来一些参考和启发。

以上がGolang は登録とログインを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。