Как исправить ошибку «Подписанный класс не существует» в Laravel 5.7?

Я только что обновил свой проект 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');
    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
6
0
1 947
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Взгляните на Документация 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,
];

Я никогда раньше не использовал подписанный маршрут, поэтому я впервые читаю об этом, но я заметил, что маршрут, созданный Laravel в виде ссылки в электронном письме, по которой пользователь может щелкнуть, чтобы убедиться, что его адрес электронной почты имеет параметр «подпись». на нем вроде: подпись = e2d1ec695235328d5e99fc47a0e10a3d5ce1499bb256d31f5a‌ 88b8398cadbfd5

Wayne Fulcher 19.09.2018 17:08

У меня была такая же проблема с проверкой электронной почты 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');
}

Другие вопросы по теме