Я только что обновил свой проект Laravel с 5.6 до 5.7. Основная причина, по которой я обновился, заключалась в том, что мне нужно было добавить в свой проект подтверждение адреса электронной почты. После того, как я выполнил все шаги обновления и внедрил проверку электронной почты в соответствии с документацией Laravel, я получаю сообщение об ошибке. Итак, шаги, ведущие к ошибке, следующие:
Я использовал 1 маршрут для тестирования, в моем файле .. \ routes \ web.php у меня есть эта строка кода:
Route::get('dashboard', ['uses' => 'DashboardController@getDashboard'])->middleware('verified');
Когда я пытаюсь перейти по этому маршруту, он перенаправляет меня в представление для .. \ views \ auth \ verify.blade.php, как и должно. Там я нажимаю ссылку, чтобы отправить письмо с подтверждением. Я получаю письмо и нажимаю кнопку в письме, чтобы подтвердить свой адрес электронной почты. Он запускает браузер и начинает меня куда-то перемещать, и вот тогда появляется ошибка:
Class signed does not exist
После долгих исследований я обнаружил, что ошибка была в новом файле VerificationController.php, который, как сказано в инструкциях, должен быть создан, и строка кода, вызывающая проблему:
$this->middleware('signed')->only('verify');
Если я закомментирую эту строку и снова нажму кнопку в своем электронном письме, она будет работать без ошибок, а столбец email_verified_at моих пользователей будет обновлен с отметкой даты и времени.
Ниже представлен весь файл VerificationController.pas на тот случай, если он проливает свет на проблему:
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = '/dashboard';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
}






Взгляните на Документация Laravel по подписанным URL-адресам
Я предполагаю, что вам не хватает этой записи в массиве $routeMiddleware
// In app\Http\Kernel.php
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
...
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
];
У меня была такая же проблема с проверкой электронной почты API, и мне пришлось добавить событие, которое запускает отправку электронной почты в app / Providers / EventServiceProvider.php
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
];
и переопределить функции app / Http / Controllers / Auth / VerificationController.php
/**
* Show the email verification notice.
*
*/
public function show()
{
}
/**
* Mark the authenticated user's email address as verified.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function verify(Request $request)
{
if ($request->route('id') == $request->user()->getKey() &&
$request->user()->markEmailAsVerified()) {
event(new Verified($request->user()));
}
return response()->json('Email verified!');
}
/**
* Resend the email verification notification.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function resend(Request $request)
{
if ($request->user()->hasVerifiedEmail()) {
return response()->json('User already have verified email!', 422);
}
$request->user()->sendEmailVerificationNotification();
return response()->json('The notification has been resubmitted');
}
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
Я никогда раньше не использовал подписанный маршрут, поэтому я впервые читаю об этом, но я заметил, что маршрут, созданный Laravel в виде ссылки в электронном письме, по которой пользователь может щелкнуть, чтобы убедиться, что его адрес электронной почты имеет параметр «подпись». на нем вроде: подпись = e2d1ec695235328d5e99fc47a0e10a3d5ce1499bb256d31f5a 88b8398cadbfd5