Sean_Zhang__ 2024-05-23 17:19 采纳率: 100%
浏览 8
已结题

如何在 llama.cpp 服务器中实现用户登录功能的优化方案?(语言-c++)

我正在修改 llama.cpp/examples/server/public 目录下的 index.html 文件,以添加一个用户登录窗口。这个登录窗口将提示用户输入用户名和密码以访问服务器。我希望将用户信息管理在一个 .js 文件中,以便在添加新用户时不需要重新构建整个项目。

我尝试过的方法:

  1. 在 public 目录下创建一个 users.js 文件,并在 index.html 中导入它。
    结果:这会导致 404 错误。

  2. 在 public 目录下创建一个 users.js 文件,在 index.html 中导入它,并将其添加到 Makefile 中以生成 users.js.hpp,然后在 server.cpp 中包含并获取 users.js.hpp。
    结果:每次添加新用户时都需要重新构建。

问题:
是否有人有更好的方法来实现这一目标?谢谢大家!

  • 写回答

17条回答 默认 最新

  • 阿齐Archie 嵌入式领域优质创作者 2024-05-23 17:21
    关注

    以下参考免费微信小程序:皆我百晓生 作答,并由阿齐Archie整理回复,若还有疑问可评论或留言。

    要实现用户登录功能,并优化用户信息管理,你可以采用以下方案来解决你的问题:

    方案概述

    1. 前端用户界面 - 使用HTML和JavaScript创建登录界面。
    2. 后端用户验证 - 使用C++编写后端逻辑来处理登录请求和用户验证。
    3. 用户信息存储 - 将用户信息存储在一个外部文件中,以便在不重新编译服务器的情况下更新用户信息。

    详细步骤

    1. 前端登录界面

    public/index.html 中添加一个简单的登录表单:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Login</title>
        <script src="users.js"></script>
    </head>
    <body>
        <h2>Login</h2>
        <form id="loginForm">
            Username: <input type="text" id="username"><br>
            Password: <input type="password" id="password"><br>
            <button type="button" onclick="login()">Submit</button>
        </form>
        <script>
            function login() {
                var username = document.getElementById('username').value;
                var password = document.getElementById('password').value;
                // 发送AJAX请求到后端验证用户
                fetch('/login', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify({ username: username, password: password })
                })
                .then(response => response.json())
                .then(data => {
                    console.log('Success:', data);
                    // 根据返回的数据进行相应处理
                })
                .catch((error) => {
                    console.error('Error:', error);
                });
            }
        </script>
    </body>
    </html>
    

    2. 后端处理逻辑

    server.cpp 中添加处理登录请求的逻辑:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <nlohmann/json.hpp> // 使用 json 库来解析和生成 JSON
    
    void handleLogin(const nlohmann::json& request, nlohmann::json& response) {
        std::string username = request["username"];
        std::string password = request["password"];
    
        // 从文件中读取用户数据
        std::ifstream userFile("users.txt");
        if (!userFile.is_open()) {
            response["status"] = "error";
            response["message"] = "Unable to open user file.";
            return;
        }
    
        std::string line;
        while (getline(userFile, line)) {
            std::istringstream iss(line);
            std::string storedUsername, storedPassword;
            if (!(iss >> storedUsername >> storedPassword)) {
                continue; // 格式错误,跳过这行
            }
            if (storedUsername == username && storedPassword == password) {
                response["status"] = "success";
                response["message"] = "Login successful.";
                return;
            }
        }
    
        response["status"] = "error";
        response["message"] = "Invalid username or password.";
    }
    
    int main() {
        // 服务器初始化和逻辑...
        // 添加登录请求的处理
        // ...
    
        return 0;
    }
    

    3. 用户信息存储

    将用户信息存储在一个文本文件中,例如 users.txt,格式如下:

    username1:password1
    username2:password2
    

    每次添加新用户时,你只需更新这个文件,无需重新构建服务器。

    注意事项

    • 确保服务器配置正确,以便能够找到并正确响应 /login 请求。
    • 使用HTTPS来保护用户数据,避免明文传输。
    • 考虑使用更安全的密码存储策略(如哈希存储密码)。

    这个方案允许你通过修改外部文件来更新用户信息,而无需重新编译服务器代码,同时保持了服务器和用户界面的分离。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(16条)

报告相同问题?

问题事件

  • 系统已结题 6月4日
  • 已采纳回答 5月27日
  • 创建了问题 5月23日

悬赏问题

  • ¥15 STM32F103上电短路问题
  • ¥15 关于#单片机#的问题:以ATMEGA128或相近型号单片机为控制器设计直流电机调速的闭环控制系统(相关搜索:设计报告|软件设计|流程图)
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办