有没有简单的办法区分签名 URL 是过期了还是签名错误?
use Illuminate\Routing\Exceptions\InvalidSignatureException;
/**
* 为应用程序注册异常处理回调
*
* @return void
*/
public function register()
{
$this->renderable(function (InvalidSignatureException $e) {
return response()->view('error.link-expired', [], 403);
});
}
复制自:生成 URL《Laravel 9 中文文档》
试了改成下面的:
return response()->view('error.link-expired', ['message' => $e->getMessage()], 403);
不管是过期还是错误都返回“Invalid signature.”。
先考虑有无必要。
底层对“是否为签名”和“签名是否过期”的两个验证统一抛出
InvalidSignatureException
,如果想细分,只能自定义中间件或手动分别调用两个验证方法 hasCorrectSignature() signatureHasNotExpired()。可以用 facade 调用
Illuminate\Support\Facades\URL::
验证签名的路由中间件 Illuminate\Routing\Middleware\ValidateSignature.php
hasValidSignature() Illuminate\Routing\UrlGenerator.php