You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Loopback 3.x+PostgreSQL环境Access Token无效问题求助

解决Loopback 3.x + PostgreSQL中AccessToken的token.created must be a valid Date 500错误

我之前帮同事排查过几乎一模一样的问题,核心原因是PostgreSQL中access_token表的created字段没有正确映射为Loopback所需的Date类型,导致从数据库读取Token时,created值为null,触发了AccessToken模型的验证断言错误。

下面是一步步的解决方案:

1. 确认Loopback AccessToken模型的字段配置

首先检查你的AccessToken模型定义,确保created字段的类型和默认值配置正确:

  • 如果是JSON模型文件(common/models/access-token.json):
{
  "name": "AccessToken",
  "base": "AccessToken",
  "properties": {
    "created": {
      "type": "Date",
      "default": "$now"
    }
    // 其他字段保持默认即可
  }
}
  • 如果是JS模型文件(common/models/access-token.js):
module.exports = function(AccessToken) {
  // 确保created字段的类型和默认生成逻辑正确
  AccessToken.defineProperty('created', {
    type: Date,
    defaultFn: 'now'
  });
};

2. 修正PostgreSQL数据库表的字段类型

登录到你的PostgreSQL数据库,检查access_token表的created字段类型:

  • 正确的类型应该是TIMESTAMP WITH TIME ZONE或TIMESTAMP,而不是VARCHAR、TEXT或者其他类型。
  • 执行SQL修改字段类型并设置默认值:
-- 修改字段类型为带时区的时间戳
ALTER TABLE access_token ALTER COLUMN created TYPE TIMESTAMP WITH TIME ZONE;
-- 设置默认值为当前时间,确保新生成的Token自动填充该字段
ALTER TABLE access_token ALTER COLUMN created SET DEFAULT CURRENT_TIMESTAMP;

3. 修复已存在的无效Token记录

如果数据库里已经有created为null的Token记录,这些记录会继续触发错误,需要批量更新:

UPDATE access_token SET created = CURRENT_TIMESTAMP WHERE created IS NULL;

4. 确认Loopback PostgreSQL连接器版本兼容性

Loopback 3.x需要搭配适配的loopback-connector-postgresql版本(推荐^5.x版本,6.x+主要适配Loopback 4),检查你的package.json,如果版本不对,重新安装:

npm install loopback-connector-postgresql@^5.0.0 --save

为什么会出现这个错误?

Loopback的AccessToken模型在验证方法(access-token.js的validate函数)中会断言token.created是一个有效的Date对象。当数据库中该字段为null或类型无法被连接器解析为Date时,读取后的值就是null,直接触发断言失败,抛出500错误。

内容的提问来源于stack exchange,提问作者ahadortiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:34:29