Как исправить ошибку «Класс подписан не существует» в Laravel 5.7? - PullRequest
0 голосов
/ 19 сентября 2018

Я только что обновил свой проект Laravel с 5.6 до 5.7.Основная причина, по которой я обновился, заключалась в том, что мне нужно было добавить проверку электронной почты в мой проект.После того, как я выполнил все шаги по обновлению и внедрил Проверку электронной почты согласно документации Laravel, я получаю ошибку.Итак, шаги, приводящие к ошибке, таковы:

Я использовал 1 маршрут для тестирования, в моем файле .. \ rout \ 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');
    }
}

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

У меня была такая же проблема с проверкой электронной почты API, и мне пришлось добавить событие, которое инициирует отправку электронной почты, в app / Providers / EventServiceProvider.php

protected $listen = [
    Registered::class => [
        SendEmailVerificationNotification::class,
    ],
];

и переопределить приложение / Http / Controllers / Auth / VerificationController.php functions

/**
 * 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');
}
0 голосов
/ 19 сентября 2018

Взгляните на документацию 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,
];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...