DatomsDB 认证设置指南
问题描述
当尝试创建数据资产时,可能会遇到 "Unauthorized: User not authenticated" 错误。这通常是由于认证配置不正确导致的。
解决方案
1. JWT Secret 配置
确保JWT secret已正确配置。有两种方式:
方式一:设置环境变量(推荐)
export JWT_SECRET="your-secure-jwt-secret-key"
方式二:使用默认值
系统已配置默认的JWT secret,如果没有设置环境变量,将自动使用默认值。
2. 启用认证(可选)
如果需要启用完整的认证系统:
export ENABLE_AUTH=true
export API_TOKEN="your-api-token"
3. 重启服务器
修改配置后,需要重启服务器:
# 停止当前服务器
pkill -f "node.*server.js"
# 启动服务器
node server.js
认证模式
模式一:认证禁用(默认)
ENABLE_AUTH未设置或为false- 所有API请求都以管理员权限执行
- 适用于开发环境或内部系统
模式二:认证启用
ENABLE_AUTH=true- 需要有效的JWT token或API token
- 支持基于角色的权限控制
前端认证配置
前端JavaScript代码已正确配置,会自动从localStorage获取认证token:
'Authorization': `Bearer ${localStorage.getItem('authToken')}`
测试认证
测试登录
curl -X POST "http://localhost:9000/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "admin123"}'
测试API访问
# 获取token
TOKEN=$(curl -s -X POST "http://localhost:9000/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "admin123"}' | \
grep -o '"token":"[^"]*"' | cut -d'"' -f4)
# 使用token访问API
curl -X GET "http://localhost:9000/api/admin/users" \
-H "Authorization: Bearer $TOKEN"
常见问题
1. "Invalid or expired token"
- 检查JWT_SECRET是否正确配置
- 重新登录获取新token
2. "User not authenticated"
- 确保前端正确发送Authorization header
- 检查localStorage中是否有有效的authToken
3. 权限不足
- 检查用户角色和权限配置
- 确保用户有相应的操作权限
已修复的问题
- JWT Secret 默认值:现在系统提供默认的JWT secret,避免验证失败
- 权限检查优化:当认证禁用时,自动提供管理员权限
- 用户角色信息:JWT验证后正确设置用户的角色信息
生产环境建议
- 设置强密码的JWT_SECRET环境变量
- 启用认证(ENABLE_AUTH=true)
- 定期更换API token
- 配置HTTPS
- 设置适当的token过期时间