使用Node.js开发CLI时,有无存储auth token的工具库?
适合CLI工具的Node.js认证&Token存储库推荐
嘿,我刚好在开发Node.js CLI工具时处理过类似的认证需求,给你推荐几个实用的库,完美适配你的场景:
1. conf - 轻量级的配置/Token存储库
这个库专门用来在用户本地存储持久化配置(比如auth token),它会自动根据系统选择合适的存储位置(比如macOS的~/Library/Preferences、Windows的%APPDATA%),不用你自己操心路径问题。
使用示例:
const Conf = require('conf'); const config = new Conf({ projectName: 'your-cli-tool' }); // 认证成功后存储token config.set('authToken', 'your-valid-token-here'); // 后续API调用时获取token const token = config.get('authToken'); if (!token) { // 提示用户重新认证 }
2. inquirer - 交互式命令行认证
如果你需要让用户输入用户名/密码来获取token,inquirer可以帮你创建友好的交互式命令行界面,比如输入密码时自动隐藏输入内容,提升用户体验。
使用示例:
const inquirer = require('inquirer'); const Conf = require('conf'); const config = new Conf({ projectName: 'your-cli-tool' }); async function authenticate() { const answers = await inquirer.prompt([ { type: 'input', name: 'username', message: '请输入你的用户名:' }, { type: 'password', name: 'password', message: '请输入你的密码:' } ]); // 调用认证API获取token const token = await fetchAuthToken(answers.username, answers.password); // 存储token到本地 config.set('authToken', token); console.log('认证成功!'); } // 检查是否已有token,无则触发认证流程 if (!config.get('authToken')) { await authenticate(); }
3. axios + 拦截器 - 自动携带Token发起API请求
用axios作为HTTP客户端的话,可以设置请求拦截器,自动在每个API请求的header里带上存储的token,不用每次手动添加,减少重复代码。
使用示例:
const axios = require('axios'); const Conf = require('conf'); const config = new Conf({ projectName: 'your-cli-tool' }); // 创建axios实例 const apiClient = axios.create({ baseURL: 'https://your-api-domain.com' }); // 添加请求拦截器 apiClient.interceptors.request.use(requestConfig => { const token = config.get('authToken'); if (token) { requestConfig.headers.Authorization = `Bearer ${token}`; } return requestConfig; }, error => { return Promise.reject(error); }); // 后续调用API时直接用这个实例,自动携带token const response = await apiClient.get('/api/resource');
4. commander - CLI命令框架(可选)
如果你的CLI工具需要定义多个命令(比如login、fetch-data),commander可以帮你快速搭建清晰的命令结构,结合上面的库一起使用,流程会更顺畅。比如可以单独加一个login命令触发认证:
使用示例:
const { Command } = require('commander'); const program = new Command(); program .command('login') .description('进行认证并存储会话token') .action(async () => { await authenticate(); // 调用前面定义的authenticate函数 }); program .command('fetch-data') .description('调用API获取数据') .action(async () => { const token = config.get('authToken'); if (!token) { console.log('请先执行 login 命令完成认证'); return; } // 编写API调用逻辑 }); program.parse();
这些库搭配起来用,就能轻松实现「用户认证→存储token→后续API自动携带token」的完整流程啦!
内容的提问来源于stack exchange,提问作者Blankman
相关产品推荐
相关产品推荐

