跳到主要内容

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. 权限不足

  • 检查用户角色和权限配置
  • 确保用户有相应的操作权限

已修复的问题

  1. JWT Secret 默认值:现在系统提供默认的JWT secret,避免验证失败
  2. 权限检查优化:当认证禁用时,自动提供管理员权限
  3. 用户角色信息:JWT验证后正确设置用户的角色信息

生产环境建议

  1. 设置强密码的JWT_SECRET环境变量
  2. 启用认证(ENABLE_AUTH=true)
  3. 定期更换API token
  4. 配置HTTPS
  5. 设置适当的token过期时间