【问题标题】:Laravel 8 SendVerificationEmail Event Seemingly Not FiringLaravel 8 SendVerificationEmail 事件似乎没有触发
【发布时间】:2021-12-27 17:18:35
【问题描述】:

我已按照docs 中列出的说明进行电子邮件验证。我的用户模型实现了 MustVerifyEmail 接口,我在创建用户后在我的控制器中触发事件。我还验证了我可以通过 Tinker 发送一封随机电子邮件,该电子邮件在 Mailhog 中有效。

我在我的 UserController 中创建了一个应该触发事件的测试路由,但它似乎没有被触发:

    public function test()
    {
        Log::debug('testing email');
        $user = User::find(1);
        Log::debug($user);
        event(new Registered($user));
        Log::debug('event should have fired');
    }

在 EventServiceProvider.php 中:

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

在我的用户模型中:

namespace App\Models;

use Laravel\Sanctum\HasApiTokens;
use Laravel\Jetstream\HasProfilePhoto;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\SoftDeletes;
use Laravel\Fortify\TwoFactorAuthenticatable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Contracts\Auth\MustVerifyEmail;

class User extends Authenticatable implements MustVerifyEmail
{
...

它正在按预期写入日志,但没有电子邮件。我认为我没有遗漏文档中的任何步骤,而且我不确定如何进行故障排除。如何调试事件,或者我的实现中缺少什么?

【问题讨论】:

    标签: laravel laravel-8 laravel-sail


    【解决方案1】:

    很好的问题,很高兴看到您已经采取的步骤以及您提供的信息,很多人可以从中学习!

    回到问题,我有一些建议你可以检查/尝试。

    1. 检查您尝试发送邮件的用户是否尚未验证,SendEmailVerificationNotification 中的检查有此检查,这也让我感到困惑,为什么我没有收到邮件。并确保遵循文档中的这些步骤:https://laravel.com/docs/master/verification#the-email-verification-handler

      if ($event->user instanceof MustVerifyEmail && ! $event->user->hasVerifiedEmail()) {
          $event->user->sendEmailVerificationNotification();
      }
      
    2. 仔细检查您的日志,检查任何可以为您提供更多信息的错误/异常

    3. 由于您更改了提供程序EventServiceProvider,请尝试运行composer dump-autoload,它将重建需要包含在您的应用程序中的类列表。

    4. 你可以像你说的那样发送邮件,但可以肯定的是,检查你的.env文件中的QUEUE_CONNECTION是否设置为sync,如果没有,你应该运行php artisan queue:work(不要忘记 --queue= 选项!)用于数据库驱动程序和php artisan horizon(如果已安装)用于 redis 驱动程序,否则事件可能已排队但无法运行。对于调试,sync 驱动是最简单的。

    我刚刚使用新的 Laravel 应用程序尝试了您的步骤,一切正常(按照上述步骤操作后,因为它在我的系统上也无法正常工作哈哈)

    希望这份清单能帮助您解决问题,如果您有任何问题,请告诉我! :)

    【讨论】:

    • 太棒了,谢谢。我今天要试试这些。我有点破解预期的功能,这可能是问题的一部分。我的应用程序中的用户将由管理员在应用程序中创建,而不是让用户自己注册,这应该会触发电子邮件发送出去。使用内置功能似乎应该很容易做到这一点,但也许我假设太多了。我是 laravel 的新手。
    • 很好,让我知道它是否适合您,或者您有任何问题!
    • 我刚刚尝试了您提供的步骤,但没有发现任何不同。我正在使用 jetstream,并且鉴于我之前关于创建用户与让他们注册的评论,我想知道这是否导致问题的某些方面。
    • 好吧,我至少知道部分问题。当我切换到使用我的测试路线时,我只是使用 User::find(1) 来获取一个用户,这是我当前的用户,已经过验证。因此,一旦我取消了数据库中的 email_verified_at 字段,我似乎可以更进一步。现在我收到一个有用的错误,指出我必须有一个发件人地址,所以这是朝着正确方向迈出的一步。
    • 啊,是的,“已经验证的用户”哈哈,我也遇到了同样的问题,但不知道是什么问题^^很好,你已经解决了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2013-07-28
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    相关资源
    最近更新 更多