【问题标题】:Laravel URL facade temporarySignedRoute to external urlLaravel URL 门面临时签名路由到外部 url
【发布时间】: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?如果不是,我认为他们中的任何一个都无法验证其他人生成的签名

标签: php laravel


【解决方案1】:

URL::temporarySignedRoute() 有一个名为 $absolute 的第四个参数,它是一个布尔值。所以如果你想添加一个自定义 url 而不是 Laravel 使用的默认 url,这是要更改的变量。

$absolute 的默认值为 true。因此,为了添加您自己的自定义 url,请务必先将其更改为 false,如下所示:

$verifyURL = URL::temporarySignedRoute(
  'contact.verify', Carbon::now()->addHours(24), ['contact' => 5, 'team' => 'john], false // The $absolute value
);

然后连接您的自定义网址:

$your_custom_url . $verifyURL;

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 2022-01-17
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
相关资源
最近更新 更多