kaiquegarcia / lumen-nginx-secure-link
特性,轻松将 Lumen/Laravel 项目适配使用 NGINX 安全链接
v0.1-alpha
2021-02-04 15:48 UTC
Requires
- php: >=5.6.4
- illuminate/support: ^5.2
Requires (Dev)
- laravel/lumen-framework: ^5.3
- phpunit/phpunit: ^5.7
This package is auto-updated.
Last update: 2024-09-05 01:42:00 UTC
README
特性,轻松将 Lumen/Laravel 项目适配使用 NGINX 安全链接
安装 & 设置
使用 composer 在您的 Lumen/Laravel 项目中安装此包;
Laravel / Lumen 设置
- 将
NGINX_SECURE_LINK_SECRET和NGINX_SECURE_LINK_TTL添加到您的.env文件; - 运行
php artisan vendor:publish --provider="Nginx\SecureLink\Providers\SecureLinkServiceProvider"; - 运行
php artisan config:clear。
Nginx 设置
您需要为每个要保留签名的路由创建一个配置。在设置任何配置之前,请记住编译源代码或运行 apt get install nginx-extras。
NGINX 配置(使用示例 https://yourdomain.com/signed-route/file.zip)
location /signed-route/ {
secure_link $arg_md5,$arg_expires;
secure_link_md5 "$secure_link_expires$uri$remote_addr NGINX_SECURE_LINK_SECRET";
if ($secure_link = "") { return 403; }
if ($secure_link = "0") { return 410; }
}
解释这些环境变量
NGINX_SECURE_LINK_SECRET是后端中要保留的“密码”。您必须在环境文件和每个 nginx 配置中放置它;NGINX_SECURE_LINK_TTL是生成的 secure_link 过期的时间(秒)。
如何使用
将 use \Nginx\SecureLink\Traits\WithSecureLink 添加到您的 Eloquent 模型中,并假设原始属性名为 link,您就准备好了。例如
模型实现
class ModelExample extends \Illuminate\Database\Eloquent\Model { use \Nginx\SecureLink\Traits\WithSecureLink; protected $fillable = ['link']; }
使用方法
$example = new ModelExample(); $secure_link = $example->secure_link;
自定义原始属性
您可以也应该有机会根据其他模型属性创建安全链接。为此,只需重写受保护的属性 $secure_link_origin_attribute。例如
模型实现
class ModelExample extends \Illuminate\Database\Eloquent\Model { use \Nginx\SecureLink\Traits\WithSecureLink; protected $fillable = ['my_custom_url']; protected $secure_link_origin_attribute = 'my_custom_url'; }
自定义 IP 提供者
由于此项目是为 Lumen 框架制作的,因此在尝试捕获用户客户端 IP 时可能会出现一些失败。原因是我们在使用类 Illuminate\Http\Request 来访问 ip 方法。如果您在此处遇到任何问题,您可以通过具有相同方法的任何类来开发它,并重写受保护的属性 $secure_link_ip_class_provider。例如
IP 提供者实现
class IpProvider extends \Illuminate\Http\Request { public function ip() { return "the-right-ip"; } }
模型实现
class ModelExample extends \Illuminate\Database\Eloquent\Model { use \Nginx\SecureLink\Traits\WithSecureLink; protected $fillable = ['link']; protected $secure_link_ip_class_provider = IpProvider::class; }