
调用 polar accesslink api 时返回 403 forbidden,通常并非认证失败,而是因未完成用户注册流程——即使已成功获取 access token,也必须先调用 `/v3/users` 注册用户,否则所有数据接口均会被拒绝访问。
Polar AccessLink API 采用严格的两阶段授权流程:OAuth 授权获取 token 仅表示用户已同意授权,但 Polar 后端尚未将该用户与你的应用建立绑定关系;必须显式执行 用户注册(User Registration),才能激活后续的数据访问权限。
✅ 正确调用顺序
- 完成 OAuth 2.0 授权流程,获取 access_token;
- 使用该 token 向 https://www.polaraccesslink.com/v3/users 发起 POST 请求,注册用户(此步仅需执行一次/每用户一次);
- 成功注册后,再调用如心率、活动等受保护的资源接口。
? 示例:注册用户(必需前置步骤)
await axios.post(
'https://www.polaraccesslink.com/v3/users',
{}, // 请求体为空 JSON 对象(根据文档要求)
{
headers: {
Accept: 'application/json',
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
}
);⚠️ 注意:该接口返回 201 Created 及用户 ID(user_id),请妥善保存。若重复注册同一用户,API 将返回 200 OK 并返回已有 user_id,不会报错。
? 后续数据请求(如连续心率)
完成注册后,你原来的代码即可正常工作:
const { data } = await axios.get(
'https://www.polaraccesslink.com/v3/users/continuous-heart-rate',
{
headers: {
Accept: 'application/json',
Authorization: `Bearer ${token}`,
},
params: {
from: moment(from).format('YYYY-MM-DD'),
to: moment(to).format('YYYY-MM-DD'),
},
}
);❗ 常见误区提醒
- ❌ 认为拿到 access_token 就能直接查数据 → 实际必须注册用户;
- ❌ 在未处理 POST /v3/users 响应的情况下跳过该步 → 导致后续全部 403;
- ❌ 混淆 user_id(注册返回)与 OAuth 中的 sub 或其他标识 → Polar 的数据接口依赖注册生成的 user_id(虽不总需显式传入,但绑定关系由此确立);
- ✅ 建议在 OAuth 回调处理逻辑中,自动串联注册请求,确保流程原子性。
完成用户注册是 Polar AccessLink API 的强制准入门槛。将其视为 OAuth 流程的自然延续,而非可选步骤,即可彻底规避此类 403 错误。










