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. 如有疑问或需要源码,欢迎留言沟通

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值