如果 APP_URL 包含 Laravel 6 中的端口,临时签名 URL 将不起作用

问题描述 投票:0回答:2

这很奇怪,因为如果我的

:3000
中没有
APP_URL
,它就可以正常工作。

  $url = URL::temporarySignedRoute(
            'verification.verify', Carbon::now()->addMinutes(60), ['user' => $notifiable->id]
        );

        return $url;
APP_URL=https://shadow-platform.test:3000
Route::get('email/verify/{user}', 'Auth\VerificationController@verify')->name('verification.verify');

laravel
2个回答
0
投票

首先,您需要将新的

ValidateSignature
添加到
/app/Http/Kernel.php
中的路由中间件。

protected $routeMiddleware = [
         // ...
         'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
+        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
         'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];

那么你应该将 ->middleware('signed') 应用到你的路线

Route::get('email/verify/{user}', 'Auth\VerificationController@verify')->name('verification.verify')->middleware('signed');

0
投票

我注意到我的案例也有同样的问题,但使用的是 laravel dusk 和 CI/CD。在本地它有效,因为使用 APP_URL=http://localhost 和 CI/CD APP_URL=http://127.0.0.1:8000,即使其他黄昏测试有效。最终港口并不重要。我能够让它工作。

我的问题是生成 APP_KEY,但无论如何都强制 dusk 使用 env.ci (php artisan dusk --env=ci),即使我将 env.ci 复制到 env 文件中。

结论: 针对您的环境(本地、CI/CD 等)使用正确的 APP_URL,确保事先生成您的 APP_KEY 并使用 Carbon::now() 并添加足够的额外时间。

© www.soinside.com 2019 - 2024. All rights reserved.