pdphilip / cf-request
Cloudflare Laravel 请求
v1.0.2
2024-09-19 13:04 UTC
Requires
- php: ^8.2
- illuminate/contracts: ^10.0||^11.0
- matomo/device-detector: ^6.4
- pdphilip/omniterm: ^1.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
README
Cloudflare Laravel 请求
Cloudflare Laravel 请求从 Laravel 继承请求对象,并解析 Cloudflare 的特定头部,以提供有关请求的更多信息,包括
CfRequest::ip()
- 原始客户端 IP(在它通过任何代理之前)CfRequest::country()
- 原始国家CfRequest::timezone()
- 原始时区CfRequest::city()
- 原始城市CfRequest::region()
- 原始地区CfRequest::postalCode()
- 原始邮政编码CfRequest::lat()
- 原始纬度CfRequest::lon()
- 原始经度CfRequest::isBot()
- 如果是机器人CfRequest::threatScore()
- Cloudflare 的威胁分数
用户代理也被解析以提供有关设备的更多信息,包括
CfRequest::deviceType()
- 设备类型(手机、平板电脑、桌面、电视等)CfRequest::deviceBrand()
- 设备品牌CfRequest::deviceModel()
- 设备型号CfRequest::os()
- 设备操作系统CfRequest::osVersion()
- 设备操作系统版本CfRequest::browser()
- 设备浏览器CfRequest::browserVersion()
- 设备浏览器版本
使用此包,您可以
- 在控制器方法中将
Request $request
替换为CfRequest $request
以访问附加方法。 - 在您的应用程序的任何地方调用
CfRequest
门面以访问这些信息。
亮点
借助 Cloudflare 的安全功能
public function register(CfRequest $request) { if ($request->isBot()) { abort(403, 'Naughty bots'); } if ($request->threatScore() > 50) { abort(403, 'Thanks but no thanks'); } $attributes = $request->validate([ 'first_name' => 'required|string', 'last_name' => 'required|string', //... etc ]); //... etc }
根据原始位置设置时区
date_default_timezone_set(CfRequest::timezone()); // Now carbon dates will be parsed for the user's timezone
根据用户的国家/地区应用逻辑
public function welcome() { if (CfRequest::country() === 'US') { return view('welcome_us'); } return view('welcome'); }
根据设备类型应用逻辑
public function welcome() { $loadVideo = true; if (CfRequest::deviceType() === 'mobile') { $loadVideo = false; } // etc }
要求
- Laravel 10+
- Cloudflare 作为代理(尽管它也可以在没有它的情况下工作,并且没有 CF 特定头部的数据)
安装
通过 composer 添加包
composer require pdphilip/cf-request
然后安装
php artisan cf-request:install
Cloudflare 设置
选项 1:通过 Cloudflare API
步骤 1:复制区域 ID
- 转到您的 Cloudflare 控制台
- 点击您要配置的域名
- 复制区域 ID
- 保存到 ENV 作为
CF_API_ZONE_ID
步骤 2:创建 API 令牌
- 导航到:https://dash.cloudflare.com/profile/api-tokens
- 点击 "创建令牌"
- 选择:创建自定义令牌(开始)
令牌配置
- {输入令牌名称}
- 权限
- 账户:账户规则集:编辑
- 区域:转换规则:编辑
- 账户资源
- 包含:所有账户
- 区域资源
- 包含:所有区域
- 创建令牌并保存到 ENV 作为
CF_API_TOKEN
运行 artisan 命令
php artisan cf-request:headers
选项 2:在 Cloudflare 上手动操作
转到 "修改请求头部"
- 转到您的 Cloudflare 控制台
- 点击您要配置的域名
- 点击 "规则 -> 转换规则" 菜单
- 选择 "修改请求头部" 选项卡
- 点击 "创建规则"
创建规则
- 名称:"Laravel 头部"
- 选择 "所有传入请求"
- 设置以下头部
设置为动态
X-AGENT
http.user_agent
设置为动态
X-IP
ip.src
设置为动态
X-COUNTRY
ip.src.country
设置为动态
X-CONTINENT
ip.src.continent
设置为动态
X-CITY
ip.src.city
设置为动态
X-POSTAL-CODE
ip.src.postal_code
设置为动态
X-REGION
ip.src.region
设置为动态
X-TIMEZONE
ip.src.timezone.name
设置为动态
X-LAT
ip.src.lat
设置为动态
X-LON
ip.src.lon
设置为动态
X-REFERER
http.referer
设置为动态
X-IS-BOT
cf.client.bot
设置为动态
X-THREAT-SCORE
cf.threat_score
使用说明
所有标准的Laravel请求方法都可用,以下是一些附加方法
CfRequest::country()
CfRequest::city()
CfRequest::region()
CfRequest::postalCode()
CfRequest::lat()
CfRequest::lon()
CfRequest::timezone()
CfRequest::isBot()
CfRequest::threatScore()
CfRequest::isMobile()
CfRequest::isTablet()
CfRequest::isDesktop()
CfRequest::isTv()
CfRequest::deviceType()
CfRequest::deviceBrand()
CfRequest::deviceModel()
CfRequest::os()
CfRequest::osVersion()
CfRequest::osFamily()
CfRequest::browser()
CfRequest::browserVersion()
CfRequest::browserName()
CfRequest::browserFamily()
CfRequest::referer()
CfRequest::refererDomain()
您可以使用CfRequest
外观或将CfRequest $request
类注入到控制器方法中。
测试头部信息
- 此包包含一个测试路由,它将显示从Cloudflare解析出的头部信息。
- 您可以通过访问应用程序中的
/cf-request/status
来访问此路由。 - 您可以在配置文件中禁用此功能,或将环境变量
CF_ALLOW_STATUS_VIEW
设置为false
。
更新日志
有关最近更改的更多信息,请参阅更新日志。
贡献
有关详细信息,请参阅贡献指南。
致谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。