j
jaryue
V1
2023/04/16阅读:12主题:默认主题
项目1实现login功能day1
建立数据库
-
创建名为VerificationCode的表,包含Email、Verification、ExpirationTime和time四个字段:
CREATE TABLE VerificationCode (
Email VARCHAR(255),
Verification INT,
ExpirationTime INT,
time INT
);
其中,Email字段的数据类型为VARCHAR(255),可以存储长度为255的字符串,用于存储电子邮件地址;Verification字段的数据类型为INT,用于存储验证码;ExpirationTime字段的数据类型为INT,用于存储验证码过期时间;time字段的数据类型为INT,用于存储验证码被验证的次数。
-
创建名为OperationRecord的表,包含id、操作和time三个字段:
CREATE TABLE OperationRecord (
id INT PRIMARY KEY ,
behavior VARCHAR(255),
time VARCHAR(255)
);
其中,id字段的数据类型为INT,是主键;behavior字段的数据类型为VARCHAR(255),用于存储操作信息;time字段的数据类型为VARCHAR(255),用于存储操作时间。
-
创建名为SignInList的表,包含id、IDcode和ExpirationTime三个字段:
CREATE TABLE SignInList (
id INT PRIMARY KEY,
IDcode VARCHAR(255),
ExpirationTime INT
);
其中,id字段的数据类型为INT,是主键,需要在插入数据时手动指定id的值;IDcode字段的数据类型为VARCHAR(255),用于存储身份认证码;ExpirationTime字段的数据类型为INT,用于存储身份认证码的过期时间。
实现功能模块
1. 身份验证功能模块
import (
"encoding/json"
"time"
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
type SignInData struct {
ID int64 `json:"id"`
IDCode string `json:"idcode"`
Time int64 `json:"time"`
}
func SignInVerification(data []byte) bool {
// 解析JSON数据
var signInData SignInData
if err := json.Unmarshal(data, &signInData); err != nil {
return false
}
// 连接MySQL数据库
db, err := sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/login")
if err != nil {
return false
}
defer db.Close()
// 查询身份认证码是否正确
var expirationTime int64
err = db.QueryRow("SELECT ExpirationTime FROM SignInList WHERE id = ? AND IDcode = ?", signInData.ID, signInData.IDCode).Scan(&expirationTime)
if err != nil {
return false
}
// 验证身份认证码是否过期
if signInData.Time > expirationTime {
return false
}
// 更新身份认证码的过期时间
newExpirationTime := time.Now().Unix() + 30*60
_, err = db.Exec("UPDATE SignInList SET ExpirationTime = ? WHERE id = ? AND IDcode = ?", newExpirationTime, signInData.ID, signInData.IDCode)
if err != nil {
return false
}
return true
}
作者介绍
j
jaryue
V1