带授权功能的Golang简易在线记事本实现

带授权功能的Golang简易在线记事本实现 foxypad - 使用 Gin 框架编写的带身份验证功能的简易在线记事本

GitHub: https://github.com/Dreamy16101976/foxypad

设置(在文件 foxypad.go 中):

const filename string = "foxypad.txt" //数据文件名
const port string = ":8888"           //端口号
const rows string = "20"              //行数
const login string = "user"           //登录名
const password string = "password"    //密码

构建:

go get -u github.com/gin-gonic/gin
go build foxypad.go

使用 - 在家庭服务器或 VPS 上运行

智能手机截图:


更多关于带授权功能的Golang简易在线记事本实现的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于带授权功能的Golang简易在线记事本实现的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个基于Gin框架实现的简洁在线记事本应用,具备基本的身份验证功能。下面我来分析一下这个实现的核心机制,并提供一些改进建议的代码示例。

核心功能分析

这个应用的关键在于将身份验证与文件操作结合:

// 基础的身份验证中间件示例
func authMiddleware(c *gin.Context) {
    username := c.PostForm("username")
    password := c.PostForm("password")
    
    if username != login || password != password {
        c.HTML(401, "login.html", gin.H{
            "error": "无效的登录凭证",
        })
        c.Abort()
        return
    }
    c.Next()
}

数据持久化实现

当前实现使用简单的文件存储:

func readNotes() (string, error) {
    data, err := os.ReadFile(filename)
    if err != nil {
        if os.IsNotExist(err) {
            return "", nil
        }
        return "", err
    }
    return string(data), nil
}

func writeNotes(content string) error {
    return os.WriteFile(filename, []byte(content), 0644)
}

路由处理示例

func setupRoutes() *gin.Engine {
    r := gin.Default()
    r.LoadHTMLGlob("templates/*")
    
    // 登录页面
    r.GET("/", func(c *gin.Context) {
        c.HTML(200, "login.html", nil)
    })
    
    // 认证路由组
    authorized := r.Group("/")
    authorized.Use(authMiddleware)
    {
        authorized.GET("/notes", showNotes)
        authorized.POST("/notes", saveNotes)
    }
    
    return r
}

func showNotes(c *gin.Context) {
    content, err := readNotes()
    if err != nil {
        c.String(500, "读取笔记失败")
        return
    }
    
    c.HTML(200, "notes.html", gin.H{
        "content": content,
        "rows":    rows,
    })
}

func saveNotes(c *gin.Context) {
    content := c.PostForm("content")
    if err := writeNotes(content); err != nil {
        c.String(500, "保存失败")
        return
    }
    c.String(200, "保存成功")
}

模板示例

登录页面模板可能类似:

<!DOCTYPE html>
<html>
<head>
    <title>Foxypad - 登录</title>
</head>
<body>
    <form method="post" action="/notes">
        <input type="text" name="username" placeholder="用户名" required>
        <input type="password" name="password" placeholder="密码" required>
        <button type="submit">登录</button>
    </form>
    {{if .error}}<p style="color:red">{{.error}}</p>{{end}}
</body>
</html>

这个实现展示了如何使用Gin框架快速构建一个带基础认证的Web应用。文件存储方式适合个人使用,硬编码的凭据配置使得部署简单直接。对于生产环境,建议考虑使用环境变量或配置文件来管理敏感信息。

回到顶部