有没有简单的办法区分签名 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.”。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

先考虑有无必要。
底层对“是否为签名”和“签名是否过期”的两个验证统一抛出InvalidSignatureException,如果想细分,只能自定义中间件或手动分别调用两个验证方法 hasCorrectSignature() signatureHasNotExpired()。
可以用 facade 调用 Illuminate\Support\Facades\URL::

验证签名的路由中间件 Illuminate\Routing\Middleware\ValidateSignature.php

file

hasValidSignature() Illuminate\Routing\UrlGenerator.php

file

2年前 评论
讨论数量: 2

先考虑有无必要。
底层对“是否为签名”和“签名是否过期”的两个验证统一抛出InvalidSignatureException,如果想细分,只能自定义中间件或手动分别调用两个验证方法 hasCorrectSignature() signatureHasNotExpired()。
可以用 facade 调用 Illuminate\Support\Facades\URL::

验证签名的路由中间件 Illuminate\Routing\Middleware\ValidateSignature.php

file

hasValidSignature() Illuminate\Routing\UrlGenerator.php

file

2年前 评论

源代码

  • \Illuminate\Routing\UrlGenerator::hasValidSignature
use Illuminate\Support\Facades\URL;

// 是否有正确的签名
URL::hasCorrectSignature()

// 签名没有过期
URL::signatureHasNotExpired()
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!