[{"content":"decap cms不支持gitee的api\ngitee也不支持oauth pkce拓展，在不动代码的情况下是不可能直接使用的。\n第一步，decap cms编译 gitee地址 decap-cms\ngithub地址 decap-cms\n该项目实现了gitee的发布文章API, gitee的oauth2流程。\n代码由ai编写，人工测试，目前已测试登录发布文章相关功能。\n使用npm run build 完成编译。\n在 packages/decap-cms/dist中可以找到编译后的decap-cms.js\n第二步，decap cms配置 Decap CMS 配置\n1 2 3 4 5 6 7 8 backend: name: gitee repo: \u0026lt;USER\u0026gt;/\u0026lt;REPO\u0026gt; branch: master base_url: https://\u0026lt;YOUR_PROXY_HOST\u0026gt;/gitee-proxy/ api_root: https://gitee.com/api/v5 auth_type: pkce app_id: \u0026lt;YOUR_APP_ID\u0026gt; index.html引用新生成的decap-cms.js\n1 2 3 4 5 6 7 8 9 10 11 12 \u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;utf-8\u0026#34; /\u0026gt; \u0026lt;meta name=\u0026#34;viewport\u0026#34; content=\u0026#34;width=device-width, initial-scale=1.0\u0026#34; /\u0026gt; \u0026lt;meta name=\u0026#34;robots\u0026#34; content=\u0026#34;noindex\u0026#34; /\u0026gt; \u0026lt;title\u0026gt;Blog Manage\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;script src=\u0026#34;decap-cms.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; 第三步，OAuth2的处理 OAuth应用的创建官方已经有详尽文档 gitee oauth 文档\n权限至少要选择： user_info projects pull_requests\n目前gitee不支持pkce, 仅支持授权码模式， decap-cms走pkce流程不通。\n但pkce本质是授权码模式的拓展，oauth前几步包含了授权码模式的所有参数， 只不过换token时需要client secret.\n因此这里做了一个简单的代理，核心逻辑就是 调用 oauth/token这一步时，将client secret一并送到gitee。\n相关代码在 tool/main.go 中。\n首先修改secret=\u0026ldquo;YOUR_CLIENT_SECRET\u0026rdquo;,填写自己的client secret. 使用 /PATH/TO/GOBIN/go run tool/main.go 运行代理服务 最后，创建一个入口nginx反向代理 decap cms的配置中，base_url 指向该nginx代理服务\n1 2 3 4 5 6 7 8 location /gitee-proxy/ { proxy_pass http://127.0.0.1:5000/; proxy_set_header Host gitee.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } 完成这些后，即可运行 运行后，点击 login with gitee，即可跳转进gitee登录，登陆后回调到你的decap cms地址即可完成授权。\n授权后，会进入后台页面，你可以编写文章、上传图片资源等。\n再次强调，decap cms的config中base_url是你的nginx代理地址, oauth会通过base_url进行。\n未尽事宜 目前流程中，/gitee-proxy/oauth/token接口 无论何种请求，都会带上client secret, 可能存在安全隐患。\n任何人都可以通过前端拿到你的client key, 调用/gitee-proxy/oauth/token自动添加了client secret，等于说对任何人来讲，只需要一个授权码就可以拿到你的access token。\n不过换授权码这一步需要gitee登录，整个流程还有这一层保护。\nUse at your own risk\n","date":"2026-04-05T20:04:00+08:00","permalink":"/posts/2026-04-05-decap-cms%E6%8E%A5%E5%85%A5gitee%E7%AE%80%E5%8D%95%E6%96%B9%E6%A1%88/","title":"Decap CMS接入Gitee简单方案"},{"content":"问题 在hugo与Decap CMS / Sveltia CMS整合过程中，经常post无法生成的问题。\n一般情况下，这个是由于时区引起的。 Decap CMS 中，对于时间格式，有一个picker_utc 参数，表示是否使用UTC时间\n如果不设定，则使用本地时间，生成的时间内没有时区标识。\n如果设定为true, 则生成的时间里面带一个Z, 比如2026-04-01T17:44:00Z， 表示此时间为UTC时区\n理论上这里设计没有什么问题，但是对于hugo来讲，无论带Z与否，经过实测，都会按照UTC解析。这样一来，北京时间2026-04-01 17:44:00 就变成了UTC时间2026-04-01 17:44:00，这在此时是一个未来的时间，默认情况下，无法生成未来的post。\n解决方案：在Decap/Sveltia CMS中的时间串中增加明确的时区标识，举例： 1 - { label: \u0026#34;日期\u0026#34;, name: \u0026#34;date\u0026#34;, widget: \u0026#34;datetime\u0026#34;, format: \u0026#34;YYYY-MM-DDTHH:mm:ss.SSS+08:00\u0026#34;} picker_utc默认false, 取的是本地时间（北京时间），我们通过format强制增加了东八区标识，这样hugo不会再误认为是UTC。经测试，该格式可以由hugo正常识别。\n手工维护markdown文档也可以使用类似方法。\n（当然，也可以开启picker_utc，整个blog全部使用UTC，理论上也没有问题，post可以正常发布。就是时间显示成UTC对于我们并不友好，还是推荐使用format）\n","date":"2026-04-01T23:25:00+08:00","permalink":"/posts/2026-04-01-sveltia-cms-%E6%97%B6%E5%8C%BA%E8%AE%BE%E7%BD%AE%E6%96%B9%E6%A1%88/","title":"hugo整合CMS时区设置方案"}]