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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

先考虑有无必要。
底层对 “是否为签名” 和 “签名是否过期” 的两个验证统一抛出 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年前 评论