这很奇怪,因为如果我的
: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');
首先,您需要将新的
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');
我注意到我的案例也有同样的问题,但使用的是 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() 并添加足够的额外时间。