Maison  >  Article  >  développement back-end  >  Comment se connecter à Golang

Comment se connecter à Golang

WBOY
WBOYoriginal
2023-05-19 11:04:37665parcourir

Comment se connecter avec Golang

Golang est un langage de programmation open source lancé par Google en 2009. Golang est largement utilisé dans le développement back-end, le cloud computing et d'autres domaines en raison de ses avantages tels que l'efficacité, la fiabilité et la facilité de maintenance. Dans le développement de Golang, étant donné que des fonctions telles que la connexion utilisateur doivent être implémentées, la manière d'implémenter la connexion utilisateur dans Golang est devenue une question importante. Cet article expliquera comment implémenter la connexion utilisateur dans Golang.

1. Le principe de la connexion utilisateur dans Golang

Pour implémenter la fonction de connexion utilisateur, les informations utilisateur, telles que le nom d'utilisateur, le mot de passe, etc., doivent être enregistrées côté serveur. Lorsque l'utilisateur saisit le nom d'utilisateur et le mot de passe, le serveur doit vérifier la saisie de l'utilisateur. Si la correspondance réussit, le serveur renverra les informations de réussite de l'authentification à l'utilisateur et enregistrera l'état de connexion de l'utilisateur côté serveur. L'état de connexion peut être enregistré sous forme de cookie ou de session, afin que le serveur puisse identifier l'utilisateur lors de sa prochaine visite et renvoyer les données correspondantes.

2. Étapes pour implémenter la connexion utilisateur dans Golang

Pour implémenter la connexion utilisateur dans Golang, vous devez suivre les étapes suivantes :

  1. Créer une table de base de données

Créer une table utilisateur dans la base de données pour enregistrer l'utilisateur de l'utilisateur. nom, mot de passe et autres informations, comme indiqué ci-dessous :

Utilisateurs CREATE TABLE (
ID int NOT NULL AUTO_INCREMENT,
Nom varchar(20) NOT NULL,
Mot de passe varchar(50) NOT NULL,
PRIMARY KEY (ID)
) ;

  1. Écrire la page de connexion

Dans la page frontale, vous devez fournir des zones de saisie pour le nom d'utilisateur et le mot de passe. Une fois que l'utilisateur a saisi son compte et son mot de passe, cliquez sur le bouton de connexion et une demande sera envoyée au. serveur. La demande doit inclure les informations de compte et de mot de passe saisies par l'utilisateur.

  1. Écrire l'interface Golang

Après avoir reçu la demande de la page frontale, le serveur doit écrire l'interface correspondante pour recevoir et traiter la demande. Les étapes de traitement sont les suivantes :

(1) Obtenez les informations de nom d'utilisateur et de mot de passe contenues dans la demande.

(2) Connectez-vous à la base de données et vérifiez le nom d'utilisateur et le mot de passe saisis par l'utilisateur. Si le nom d'utilisateur et le mot de passe correspondent correctement, les informations d'authentification réussie sont renvoyées et les informations utilisateur trouvées sont enregistrées sur le serveur.

(3) Renvoie les informations sur l'état de connexion au front-end.

  1. Enregistrer le statut de connexion

Dans Golang, le statut de connexion de l'utilisateur peut être enregistré via une session ou un mécanisme de cookie. La session contient des informations enregistrées côté serveur et le cookie contient des informations enregistrées côté client. Lorsque l'utilisateur se connecte avec succès, le serveur peut enregistrer les informations utilisateur dans la session et enregistrer les informations d'identification de session dans le cookie afin que le serveur puisse identifier l'utilisateur lors de sa prochaine visite.

  1. Problèmes de sécurité des informations utilisateur

Pendant le processus de connexion de l'utilisateur, la sécurité des informations utilisateur doit être assurée. Le mot de passe de l'utilisateur doit être crypté. Dans Golang, l'algorithme bcrypt peut être utilisé pour crypter les mots de passe. L'algorithme de chiffrement bcrypt est un algorithme de hachage sécurisé qui hache les mots de passe à plusieurs reprises en plusieurs tours, améliorant ainsi la sécurité des mots de passe.

3. Exemple d'implémentation de la connexion utilisateur dans Golang

Ce qui suit est un exemple simple qui montre comment implémenter la connexion utilisateur dans Golang.

  1. Créer une table utilisateur

Exécutez l'instruction SQL suivante dans MySQL :

CREATE TABLE utilisateurs (
ID int NOT NULL AUTO_INCREMENT,
Nom varchar(20) NOT NULL,
Mot de passe varchar(100) NOT NULL,
PRIMARY KEY (ID)
);

  1. Ecriture de la page de connexion

Dans le fichier HTML, vous pouvez écrire le code suivant :

8b05045a5be5764f313ed5b9168a17e6
100db36a723c770d327fc0aef2ce13b1
93f0f5c25f18dab9d176bd4f6de5d30e

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

3c7b149cc556f883a18b3c490b028d4e
6c04bd5ca3fcae76e30b72ad730ca86d

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

36cc49f0c466276486e50c850b7e4956
73a6ac4ed44ffec12cee46588e518a5e

  1. Écrire du code Golang

Le code Golang est le suivant :

package main

import (

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

"golang.org/x/crypto/bcrypt"

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

)

tapez User struct {

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(chaîne de nom d'utilisateur ) 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(username string) (Utilisateur, erreur) {

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(password string) (string, erreur) ) {

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

}

func CheckPasswordHash(mot de passe, chaîne de hachage) 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))

}

Le code ci-dessus implémente la fonction de connexion de l'utilisateur. Sa logique comprend principalement des étapes telles que déterminer si l'utilisateur existe, vérifier le mot de passe, générer un identifiant de session et créer des cookies. Pour une implémentation spécifique, veuillez vous référer aux commentaires dans le code.

4. Résumé

Pour implémenter la fonction de connexion utilisateur dans Golang, les principales étapes à suivre incluent la création de tables utilisateur, l'écriture de pages de connexion, l'écriture d'interfaces Golang, l'enregistrement de l'état de connexion et les problèmes de sécurité des informations utilisateur. Pendant le processus de mise en œuvre, une attention particulière doit être accordée à la sécurité des informations des utilisateurs. Cet article utilise un exemple simple pour présenter comment implémenter la fonction de connexion utilisateur dans Golang. Sur cette base, les lecteurs peuvent développer pour implémenter des fonctions plus complexes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn