
调用 polar accesslink api 时返回 403 forbidden,通常并非认证失败,而是因用户未在 polar 后端完成注册——必须先调用 `/v3/users` 注册接口,才能访问后续受保护的数据端点(如心率、活动等)。
在成功完成 OAuth 2.0 授权流程并获取有效 access_token 后,仍不能直接请求用户数据。Polar AccessLink API 采用两级授权模型:
- OAuth 认证(获得 token)仅证明应用已获用户授权;
- 用户显式注册(POST /v3/users)才是将该 token 绑定至 Polar 用户账户、激活数据访问权限的关键步骤。
若跳过注册,所有下游数据接口(如 /v3/users/continuous-heart-rate、/v3/users/activity-data 等)均会返回 403 Forbidden,即使 token 有效、签名正确、时间范围合法。
✅ 正确调用顺序如下:
// Step 1: 注册用户(只需执行一次,或在用户首次授权后立即调用)
await axios.post(
'https://www.polaraccesslink.com/v3/users',
{},
{
headers: {
Accept: 'application/json',
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
}
);
// Step 2: 获取连续心率数据(此时才可成功)
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'),
},
}
);⚠️ 注意事项:
- 注册接口为 POST /v3/users(无请求体),返回 201 Created 及包含 user_id 的响应体;
- 同一用户重复注册会返回 200 OK,幂等安全,建议在每次新 token 获取后主动注册以确保状态一致;
- user_id 是后续多数 API 的隐式路径参数(如 /v3/users/{user_id}/...),但 Polar 当前 v3 版本多数端点仍使用 /v3/users/... 形式,由 token 自动关联;
- 若注册失败(如返回 400 Bad Request 或 409 Conflict),需检查 token 是否已过期、是否被撤销,或用户是否已在 Polar 系统中存在冲突状态。
? 总结:403 在 Polar AccessLink 中几乎总是意味着“用户尚未注册”,而非权限不足或签名错误。将 POST /v3/users 作为 OAuth 流程的强制收尾步骤,是避免此类错误最根本的实践。










