我正在寻找一种方法来VerifyCsrfToken从包内的全局中间件管道中删除,而无需用户修改App\Http\Middleware\VerifyCsrfToken. 这可能吗?
我正在开发一个包,可以轻松地将推送部署功能安全地添加到任何 Laravel 项目中。我从 Github 开始。Github 使用 webhooks通知 3rd 方应用有关事件的信息,例如推送或发布。换句话说,我会在 Github 上注册一个像http://myapp.com/deploy这样的 URL ,Github 会POST向该 URL发送一个请求,其中包含一个包含事件详细信息的负载,我可以使用该事件来触发新的部署。显然,我不想触发部署,因为 Github 服务以外的一些随机(或可能是恶意的)代理访问该 URL。因此,Github 有一个保护你的 webhooks 的过程. 这涉及向 Github 注册一个密钥,他们将使用该密钥发送一个特殊的、安全的哈希标头以及您可以用来验证它的请求。
我使这个安全的方法包括:
首先,我会自动生成两个随机的、唯一的字符串,它们存储在.env文件中并用于在我的应用程序中创建密钥路由。在.env文件中,这看起来像:
AUTODEPLOY_SECRET=BHBfCiC0bjIDCAGH2I54JACwKNrC2dqn
AUTODEPLOY_ROUTE=UG2Yu8QzHY6KbxvLNxcRs0HVy9lQnKsx
Run Code Online (Sandbox Code Playgroud)
在config这个包创建了两个按键,auto-deploy.secret而且auto-deploy.route我可以访问登记的路线时,使其永远不会被发表在任何回购协议:
Route::post(config('auto-deploy.route'),'MyController@index');
Run Code Online (Sandbox Code Playgroud)
然后我可以去 Github 并像这样注册我的电子书:
这样,部署 URL 和用于验证请求的密钥都将保持机密,并防止恶意代理在站点上触发随机部署。
该方法的下一部分涉及为 Laravel 应用程序创建一个全局中间件,用于捕获和验证 webhook 请求。通过使用此 Laracasts 讨论线程中演示的方法,我能够确保我的中间件在队列开头附近执行。在ServiceProviderfor …