利用模拟表单提交修改 Ghost 设置:绕过 Admin API 的限制
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 管理工具、自动化部署脚本或自定义后台,这种方法将为你打开一扇通往更深层控制的大门。