j

jaryue

V1

2023/04/16阅读:12主题:默认主题

项目1实现login功能day1

建立数据库

  1. 创建名为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,用于存储验证码被验证的次数。

  1. 创建名为OperationRecord的表,包含id、操作和time三个字段:
CREATE TABLE OperationRecord (
  id INT PRIMARY KEY ,
  behavior VARCHAR(255),
  time VARCHAR(255)
);

其中,id字段的数据类型为INT,是主键;behavior字段的数据类型为VARCHAR(255),用于存储操作信息;time字段的数据类型为VARCHAR(255),用于存储操作时间。

  1. 创建名为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