利用模拟表单提交修改 Ghost 设置:绕过 Admin API 的限制

作者: dreamfly 分类: nodejs 发布时间: 2025-09-15 17:45

Ghost 是一款现代化的开源博客平台,提供了强大的内容管理能力和灵活的 API 接口。然而,在某些场景下,Ghost Admin API 并不开放对站点设置(如标题、描述等)的直接修改接口,这给自动化配置和集成带来了挑战。

本文将介绍一种可行的解决方案:模拟后台表单登录与提交行为,实现对 Ghost 设置的修改。


Ghost Admin API 的限制

Ghost Admin API 提供了丰富的内容管理接口,如文章发布、标签管理、用户信息等,但它并未公开用于修改站点设置的 API。例如:

  • /ghost/api/admin/settings/ 接口存在,但需要后台登录 session,且不接受 API Key 认证。
  • 无法通过 Admin API Key 或 Content API Key 修改站点标题、描述等设置项。

这意味着,如果你希望通过代码修改 Ghost 的设置,必须模拟后台登录行为。


解决方案:模拟后台登录 + 表单提交

步骤一:模拟登录获取 session cookie

Ghost 后台登录接口为:

POST /ghost/api/admin/session/

请求体格式:

{
  "username": "admin@example.com",
  "password": "your-password"
}

登录成功后,服务器会返回 Set-Cookie 响应头,其中包含 ghost-admin-api-session,这是后续认证的关键。

步骤二:提取并保存 cookie

在服务端(如 Node.js)中使用 Axios:

const sessionResponse = await axios.post(`${GHOST_API_URL}/ghost/api/admin/session/`, {
  username,
  password
}, {
  headers: {
    'Content-Type': 'application/json',
    'Accept-Version': 'v5.0'
  }
});

const cookies = sessionResponse.headers['set-cookie']; // 提取 session cookie

步骤三:使用 cookie 模拟设置修改请求

await axios.put(`${GHOST_API_URL}/ghost/api/admin/settings/`, {
  settings: {
    title: '新站点标题',
    description: '新描述'
  }
}, {
  headers: {
    'Cookie': cookies.join('; '),
    'Content-Type': 'application/json',
    'Accept-Version': 'v5.0'
  }
});

注意:此请求必须携带有效的 session cookie,才能被 Ghost 后台接受。


注意事项

  • Cookie 的 Path 默认是 /ghost,建议在代理时改为 /,确保前端请求能携带。
  • 如果你在浏览器环境中操作,必须设置 withCredentials: true,并确保 CORS 配置允许跨域携带 cookie。
  • Ghost 的 session cookie 是 HttpOnly,无法通过 document.cookie 设置,只能由服务器通过 Set-Cookie 设置。
  • res.setHeader(‘Set-Cookie’, cookies.map(c => c.replace(‘Path=/ghost’, ‘Path=/’)));

总结

Ghost Admin API 虽然功能强大,但在设置管理方面存在限制。通过模拟后台登录和表单提交行为,我们可以实现自动化修改站点设置的目的。这种方式虽然不如标准 API 优雅,但在实际部署和集成中非常实用。

如果你正在构建一个 Ghost 管理工具、自动化部署脚本或自定义后台,这种方法将为你打开一扇通往更深层控制的大门。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!