我想创建三个应用程序: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
}