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

Comment se connecter à Golang

WBOY
Libérer: 2023-05-19 11:04:37
original
750 Les gens l'ont consulté

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 :



<meta charset="UTF-8" />
<title>Login Page</title>
Copier après la connexion


<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>
Copier après la connexion


  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"
Copier après la connexion

)

tapez User struct {

ID       int    `json:"id"`
Name     string `json:"name"`
Password string `json:"password"`
Copier après la connexion

}

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)
}
Copier après la connexion

}

func dbClose() {

db.Close()
Copier après la connexion

}

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
Copier après la connexion

}

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)
}
Copier après la connexion

}

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
Copier après la connexion

}

func HashPassword(password string) (string, erreur) ) {

bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
return string(bytes), err
Copier après la connexion

}

func CheckPasswordHash(mot de passe, chaîne de hachage) bool {

err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
return err == nil
Copier après la connexion

}

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)
}
Copier après la connexion

}

func createSession() string {

b := make([]byte, 16)
_, err := rand.Read(b)
if err != nil {
    log.Fatal(err)
}
return fmt.Sprintf("%x", b)
Copier après la connexion

}

func main() {

dbSetup()
defer dbClose()

http.HandleFunc("/login", LoginHandler)

log.Fatal(http.ListenAndServe(":8080", nil))
Copier après la connexion

}

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal