打开邮箱验证地址提示访问被拒绝

打开邮箱验证地址提示访问被拒绝
403 签名无效

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

@MArtian

file 打开认证链接后报403

2年前 评论
MArtian 2年前
MArtian 2年前
讨论数量: 7

你好,贴一下你的代码,仔细检查一下和教程的有没有出入

2年前 评论
2年前 评论
MArtian 2年前

@MArtian

file 打开认证链接后报403

2年前 评论
MArtian 2年前
MArtian 2年前

开发环境

1. 使用的是apache服务器
2. 本地测试域名配置的是https
3. apache 的 virtual host 中没有开启 SSLEngine on
如果你也是上述开发环境,那么可以打印一下这个值:
$_SERVER['HTTPS'] // 确认值是否为 on,如果是 off 或不存在可以继续往下看

进一步确认

符合以上情况,可以 debug 一下这两个函数中生成出来 url 的值,进行确认

signedRoute(laravel_bbs/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:319)
$this->route($name, $parameters, $absolute)

hasCorrectSignature(laravel_bbs/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:404)
$queryString = ltrim(preg_replace('/(^|&)signature=[^&]+/', '', $request->server->get('QUERY_STRING')), '&');

我验签失败的问题在于,加密函数 signedRoute 生成出来的 url 是 https://xxx ,而解密函数 hasCorrectSignature 获取到 url 是 http://xxx

问题原因

我在项目入口配置了 URL::forceScheme('https')
这个方法对 route 方法有效,signedRoute 函数中使用 route 方法生成出来的链接是 https://
hasCorrectSignature 函数中使用 $https = $this->server->get('HTTPS') 进行判断,这不受 URL::forceScheme('https') 影响,生成出来的 url 为 http:// , 两者签名结果不一致。

解决办法:

apache 配置完整的 ssl

2年前 评论

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