Laravel 提供 signed 方法生成带签名的临时 URL,如 URL::signedRoute('verify.email', ['id' => 1], now()->addMinutes(30)) 创建 30 分钟有效的链接,通过 middleware('signed') 自动验证签名与有效期,防止篡改;可附加 user_id 等参数参与签名,增强安全性;路由需添加 ->middleware('signed') 以启用自动校验,确保请求合法。

如果您需要为 Laravel 应用中的某个路由生成一个带有签名的临时 URL,以确保该链接只能在特定时间内由授权用户访问,则可以使用 Laravel 内置的签名 URL 功能。这类 URL 常用于邮件验证、密码重置或临时资源访问等场景。
本文运行环境:MacBook Pro,macOS Sonoma
Laravel 提供了 temporarySignedRoute 和 signed 方法来为指定路由生成带有时间限制和签名信息的 URL,确保链接无法被篡改且仅在有效期内可用。
1、在控制器或路由闭包中调用 URL::signedRoute() 方法,并传入路由名称、参数以及过期时间戳。
2、例如:URL::signedRoute('verify.email', ['id' => 1], now()->addMinutes(30)) 将生成一个 30 分钟内有效的签名链接。
3、在接收请求时,使用中间件 ->middleware('signed') 来验证签名有效性,若签名无效或已过期将自动返回 403 错误。
除了基础的时间签名外,您还可以在 URL 中附加自定义参数并将其纳入签名计算范围,从而增强安全性,防止参数被非法修改。
1、构建 URL 时手动添加额外参数,如 user_id、token_type 等,并确保这些参数也参与签名过程。
2、使用 URL::temporarySignedRoute() 方法时,所有传递的数组参数都会自动包含在签名哈希中。
3、示例代码:URL::temporarySignedRoute('download.file', now()->addHours(1), ['file' => 'report.pdf', 'user' => 123]),此链接仅允许下载 report.pdf 给用户 123,且一小时后失效。
为了正确处理签名 URL 请求,必须在对应的路由上应用 Laravel 自带的 signed 中间件,以便框架自动拦截并校验签名与时间戳。
1、在 routes/web.php 文件中定义路由时添加中间件,例如:Route::get('/verify', [VerifyController::class, 'handle'])->name('verify.email')->middleware('signed');
2、在控制器方法中无需手动验证签名,只要通过中间件检测,即可认为请求合法。
3、可选择性地调用 hasValidSignature() 方法进行手动判断,适用于需要差异化响应的场景。
以上就是laravel怎么生成一个带有预签名(signed)的临时URL_laravel带签名临时URL生成方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号