建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

Phabricator AphrontRequest / 保存错误修复

GG网络技术分享 2025-03-18 16:08 0


从事 Phabricator 扩展的工作让我回到了 PHP 的世界,这是我在过去几年中仅通过 WordPress 插件和博客主题接触过的一种语言。 尽管远离了这门语言,我还是能够相当快地跳回去,并感到一种“回到家”的舒适感……直到我意识到 Phabricator 没有大量记录,我需要深入研究源代码弄清楚如何完成几乎每一项任务。

一个让我困惑了一段时间的错误如下:

您正在尝试将一些数据保存到 Phabricator,但您的浏览器发出的请求包含不正确的令牌。 重新加载页面并重试。 您可能需要清除 cookie。

我试图创建并保存一个 PhabricatorAuthTemporaryToken 例如,为了允许通过第三方服务登录,并且该服务对 Phabricator 的请求是在后台发出的,因此没有 PHCID,因为没有会话,因此 CSRF 令牌无效。 本质上,我需要一种无需 CSRF 验证(通过 PHCID)步骤即可写入 Phabricator 的方法。 解决方案很简单:

// Turn off CSRF check

$unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();

// Save token

id(new PhabricatorAuthTemporaryToken())

->setTokenResource($transaction_code)

// ...

->save();

// Turn CSRF check back on

unset($unguarded);

AphrontWriteGuard::beginScopedUnguardedWrites() 允许我打开 CSRF 检查,保存令牌,然后通过重新打开 CSRF 检查 unset. 代码量少,但花了很长时间才找到!

我喜欢像 Phabricator 这样的高级库坚持这些安全检查,而无需开发人员明确地这样做; 我也喜欢暂时关闭此检查很容易。 当我遇到问题时,我一定会分享更多 PHP / Phabricator 技巧!

标签: WordPress 教程

提交需求或反馈

Demand feedback