golang實現賬號密碼登入

1.效果

 

2. 數據庫設計

create database golang;
CREATE TABLE `t_user` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `user_id` int NOT NULL COMMENT '用戶id',
  `user_name` varchar(255) NOT NULL COMMENT '用戶名',
  `password` varchar(255) NOT NULL COMMENT '密碼',
  `phone` varchar(255) NOT NULL COMMENT '手機號',
  `create_date` datetime NOT NULL COMMENT '創建時間',
  `create_by` varchar(255) DEFAULT NULL COMMENT '創建人',
  `update_date` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  `update_by` datetime DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

 

3. 端口監聽

main函數

package main

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

func main() {
	http.HandleFunc("/login", userLogin)
	http.ListenAndServe("0.0.0.0:8888",nil)
}

func userLogin(w http.ResponseWriter, r *http.Request)  {
	login.Login(w, r)
}

4. 登入邏輯

數據庫比對

package login

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"src/db"
	"src/pojo"
	"src/util"
	"strconv"
)
// 登入
func Login(w http.ResponseWriter, r *http.Request)  {
	var auth pojo.Auth
	if err := json.NewDecoder(r.Body).Decode(&auth); err != nil{
		r.Body.Close()
		log.Fatal(err)
	}
	// 如果密碼是明文
	md5userName := util.Md5(auth.Password)
	auth.Password = md5userName
	var result pojo.Resp
	fmt.Println(auth)
	// 數據庫校驗
	check := checkUser(auth)
	fmt.Println(check)
	result.Data = check
	if(check){
		result.Msg = "login success"
	}else {
		result.Msg = "login fail"
	}
	if err := json.NewEncoder(w).Encode(result); err != nil {
		log.Fatal(err)
	}
}

// 用戶賬號密碼校驗
func checkUser(auth pojo.Auth) bool  {
	conn, _ := db.Conn()
	var sql string
	sql = "select count(*) from t_user where user_name ='" + auth.UserName + "' and password = '" + auth.Password + "'"
	query, _ := conn.Query(sql)
	var flag string
	var count int
	for query.Next(){
		err := query.Scan(&flag)
		if err != nil {
			return false
		}
	}

	count,_ = strconv.Atoi(flag)

	if count > 0 {
		return true
	}

	return false
}

5. 用到的結構體

package pojo

type Resp struct {
	Code    int `json:"code"`
	Msg     string `json:"msg"`
	Data interface{}
}

type Auth struct {
	UserName string `json:"userName"`
	Password string `json:"password"`
}

6. 數據庫連接

package db

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

func Conn() (*sql.DB, error){
	// root:root@tcp(127.0.0.1:3306)/test 說明:
	// 第一個root是用戶名
	// 第二個root是密碼
	// 127.0.0.1:3306是地址
	// test 是數據庫
	conn,err := sql.Open("mysql","root:root@tcp(127.0.0.1:3306)/golang")
	return conn, err
}

7. 如有疑問或需要源碼,歡迎留言溝通

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章