【问题标题】:Laravel wrong domain in reset password linkLaravel 重置密码链接中的域错误
【发布时间】:2019-11-26 03:48:04
【问题描述】:

我在 laravel 5.8 中的 sendResetLinkResponse 控制器生成的 URL 有两次错误。

https://api.domain.org/domain.org/password/reset/....

但应该是的

https://api.domain.org/password/reset/....

APP_URL 设置为

APP_URL=domain.org

我使用自定义配置来作为端点 api.domain.org 而不是 www.domain.org/api

我的配置是:

protected function mapApiRoutes() {

 Route::domain('api.' .  env('APP_URL'))
   ->middleware('api')
   ->namespace($this->namespace)
   ->group(base_path('routes/api.php'));
}

我该如何解决?

【问题讨论】:

  • 当你将它设置为https://api.domain.org 时它会产生什么url?
  • 我在端点上得到了 404,所以我无法检查。
  • 你使用的是什么版本的 Laravel?
  • 哦.. 我忘了我正在使用自定义配置来用作端点:api.domain.org 而不是 www.domain.org/api 我更新了我的问题。

标签: laravel router


【解决方案1】:

我建议将您的子域设置为更具动态性,即

Route::domain('api.{domain}')
    ->middleware(['api', function ($request, $next) {
        $request->route()->forgetParameter('domain');

        return $next($request);
    }])
    ->namespace($this->namespace)
    ->group(base_path('routes/api.php'));

上面基本上允许任何域名,然后中间件只是将它从你的路由参数中删除,这样它就不会与你的路由闭包或控制器方法混淆。

您还需要将以下内容添加到服务提供商的启动方法中:

Route::pattern('domain', '[a-z0-9.]+');

这样您就可以将APP_URL 用作站点的域。

【讨论】:

  • 谢谢罗斯!这行得通!现在我在 .ENV 中使用完整的 url,一切都很好,还有密码链接!哇!谢谢!你能给我解释一下引导补丁吗?
  • 对不起,罗斯。我犯了一个战略错误:我将 API l 逻辑与具有 2 个不同服务器和域的前端分开:www 用于前端,API 用于后端。所以恢复密码的链接应该指向 www 域(我可以在 API 端创建一个重定向,但我更喜欢有一个干净的工作流程)。然后前端会将令牌在后台传递给 API 进行验证和更新。如何更新您的补丁以在恢复链接中提供 www url?有什么建议吗?
  • @Uncoke 抱歉,我不确定您所说的“启动补丁”是什么意思? APP_URL 用于 Laravel 无法真正确定域是什么时使用 - 看看:stackoverflow.com/questions/31129092/…。因此,如果您没有任何工作、电子邮件等需要 url 指向api,我只会让它指向www。如果这样做,那么您将不得不自己覆盖任何内置通知。
猜你喜欢
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 2021-07-26
相关资源
最近更新 更多