【发布时间】:2021-07-01 11:57:53
【问题描述】:
我正在使用 Laravel 8 生成一个临时签名路由并传递一些参数,但我希望我的 URL 将我带到我选择的某个 URL,而不是我项目中的一个页面。
就上下文而言,我的 Laravel 8 项目是一个 API,所以没有视图,然后我的 API 被一个用 Nuxt 编写的前端项目使用。
我尝试将我的 URL 添加到 temporarySignedRoute 的第一个参数,但它说我的路由没有找到。
$verifyURL = URL::temporarySignedRoute(
'https://example.com/account/verify', Carbon::now()->addHours(24), ['contact' => 5, 'team' => 'john']
);
我错过了什么或有什么解决方法?
更新
所以事实证明我不需要将用户带到外部URL,但似乎URL::temporarySignedRoute生成了错误的URL。
我生成的 URL 的开头是(例如)https://example.com/api/contact/verify,我需要 URL 是 https://api.example.com/api/contact/verify
所以同一个域,除了一个子域。
看起来APP_URL 没有被读取,因为我更改了它并且它没有影响,此外,它在其他地方使用,所以我尝试使用以下方式更新 URL:
$verifyURL = URL::temporarySignedRoute(
'contact.verify', Carbon::now()->addHours(24), ['contact' => 5, 'team' => 'john]
);
// fix for wrong URL
$verifyURL = str_replace('example.com', 'api.example.com', $verifyURL);
但是,当点击$verifyURL 提供的链接时,这似乎有一个无效的签名?我如何才能获得开头的api 部分?
【问题讨论】:
-
控制器是否在那里捕获您刚刚生成的 url?我可能错了,但 url 应该限制在您的域或域 laravel 捕获
-
temporarySignedRoute只接受路由名称,而不接受 url laravel.com/api/8.x/Illuminate/Routing/…。您可以从源中复制签名生成逻辑。它实际上只是一个普通的 SHA-256 HMAC github.com/laravel/framework/blob/8.x/src/Illuminate/Routing/… -
有没有办法让我添加
Route::redirect('/verify', 'https://example.com/'),然后将temporarySignedRoute指向verify,然后使用参数重定向?因为我试过这个并且 id 没有重定向,除非我弄错了 -
@YohanesGultom 我已经用一些发现更新了我的描述,我不需要转到外部 URL,而是我当前 URL 的子域。为什么
str_replace在这里不起作用 -
两个网站(example.com 和 api.example.com)是否共享相同的 APP_KEY?如果不是,我认为他们中的任何一个都无法验证其他人生成的签名