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. 如有疑问或需要源码,欢迎留言沟通
最后
以上就是背后冬瓜最近收集整理的关于golang实现账号密码登入的全部内容,更多相关golang实现账号密码登入内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复