如何创建服务器和客户端cli应用程序,以使用客户端本地计算机内的ssh密钥对客户端请求进行身份验证

时间:2019-11-09 07:38:35

标签: node.js ssh

我想创建三个应用程序:1.cli-main-server,它处理所有后端事务; 2..cli-client-app,它是前端应用程序,用户可以在其中登录并手动复制并粘贴用户系统的ssh-key ,3。一个cli应用程序,用户可以在其中共享帖子(纯文本)。我想知道的是如何验证已经将ssh密钥存储在该帐户中的客户端的请求(在cli-main-app中)。相似的服务器是gitlab服务器(我只知道服务器),用户可以在其中复制并粘贴其ssh-key来进行推拉操作。

到目前为止,我已经尝试创建使用jwt对请求进行身份验证的服务器, 在cli应用程序内部,我有以下命令

$ test login
$ test signup
$ test logout
$ test comment (require authentication)

对于以上所有命令,我检查key.json文件是否存在于项目根文件夹中,如果存在test comment and test logout仅适用于 test login and test signup,则表明已登录。 当用户未登录以test comment执行时,要求用户登录。当用户成功登录时,我将jwt写入key.json文件并登录用户以执行身份验证请求。这里的问题是jwt expres,所以我想像gitlab一样实现服务器。


const axios=require('../config/axios');
const fs=require('fs');
const {prompt}=require('inquirer');
const ora=require('ora')
const chalk=require('chalk')

let userController={};
let commentController={};

let {login,signup,comment}=require('./prompt');


userController.login=()=>{
    if(fs.existsSync('./key.json')){
        ora().succeed("You're already logged in!!!");
        // console.log("You're already loggedin!!!");
    }else{
        prompt(login).then(answer=>{
            axios.post('/user/login',{
                username:answer.username,
                password:answer.password
            }).then(result=>{
                fs.writeFileSync('key.json',JSON.stringify({api_key:result.data.token}));
                ora().succeed("Login successful!!!");
                process.exit(1);
            }).catch(err=>{
                console.log(err.response.data.msg);
                process.exit(1);
            });
        });
    }
}

userController.signup=()=>{
    if(fs.existsSync('./key.json')){
        ora().succeed("You're already loggedin!!!");
    }else{
        prompt(signup).then(answer=>{
            axios.post('/user',{
                username:answer.username,
                email:answer.email,
                password:answer.password,
            }).then(result=>{
                fs.writeFileSync('key.json',JSON.stringify({api_key:result.data.token}));
                ora().succeed("Login Successful!!!");;
                process.exit(1);
            }).catch(err=>{
                console.log(err.response.data.msg);
                process.exit(1);
            });
        });
    }

}

userController.logout=()=>{
    if(!fs.existsSync('./key.json')){
       ora().warn("You must login to logout");
    }else{
        if(!fs.unlinkSync('./key.json')){
            console.log("Logout successfully!!!")
            process.exit(1);
        }else{
            console.log("Unable to Logout")
            process.exit(1);
        }
    }

}

commentController.postComment=()=>{
    if(fs.existsSync('./key.json')){
        let key=JSON.parse(fs.readFileSync('./key.json')).api_key;
        prompt(comment).then(answer=>{
            axios.post('/cmnt',{
                title:answer.title,
                comment:answer.comment
            },{
                headers:{
                    "Authorization":`Bearer ${key}`
                }
            }).then(result=>{
                console.log(result.data.msg);
                process.exit(1);
            }).catch(err=>{
                console.log(err.response.data.msg);
                process.exit(1);
            });
        })
    }else{
        console.log("Please login to perform this operation.");
        console.log(process.exit(1));
    }
}

module.exports={
    userController,
    commentController
}

0 个答案:

没有答案