按照步骤实施 Laravel 本机邮件验证带来问题

Following the steps to implement Laravel native mail verification bring to an issue

按照指南实现 laravel 的本机邮件验证。 给我带来错误。

请注意,我使用 MongoDB,因此我使用 Jensseger/laravel-mongodb 包

这是错误: Class App\User contains 3 abstract methods and must therefore be declared abstract or implement the remaining methods (Illuminate\Contracts\Auth\MustVerifyEmail::hasVerifiedEmail, Illuminate\Contracts\Auth\MustVerifyEmail::markEmailAsVerified, Illuminate\Contracts\Auth\MustVerifyEmail::sendEmailVerificationNotification

我已经尝试在我的模型中实现这些方法,它们似乎可以解决问题。但是它不会发送任何电子邮件。

这是我在我的 User.php 模型中实现的

    * Determine if the user has verified their email address.
    *
    * @return bool
    */
    public function hasVerifiedEmail()
    {}

    /**
    * Mark the given user's email as verified.
    *
    * @return bool
    */
    public function markEmailAsVerified()
    {}

    /**
    * Send the email verification notification.
    *
    * @return void
    */
    public function sendEmailVerificationNotification()
    {}

这是我的 User.php 模型

namespace App;

use App\Company;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Jenssegers\Mongodb\Auth\User as Authenticatable;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;

    protected $connection = 'mongodb';

这是我的 web.php 路线文件。

Route::get('/', function () {
    return view('welcome');
});

Auth::routes(['verify' => true]);

Route::get('/home', 'HomeController@index')->name('home');

这是我的 HomeController.php

    public function __construct()
    {
        $this->middleware(['auth','verified']);
    }

这是我的环境文件

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=25
MAIL_USERNAME=xxxxxxxxxxx
MAIL_PASSWORD=xxxxxxxxxxxx
MAIL_ENCRYPTION=tls

像这样项目工作,但它不会发送电子邮件。我是否需要将逻辑放在 User.php 中的三个方法中?如果是,我应该在里面放什么?我不知道,因为如果它是原生的并且像 SQL 一样工作,我真的不知道如何让它在我的项目中工作 希望有人对此有解决方案。 谢谢

最简单的解决方案是实现应该存在的特征 Illuminate\Auth\MustVerifyEmail,但是 Laravel 文档中并未提及。您还可以通过在模型中定义这些方法来覆盖它们。但是 hasVerifiedEmailmarkEmailAsVerified 方法应该有一些验证逻辑和 return bool 基于 the API

编辑: 我也忘了提到方法 sendEmailVerificationNotification 应该包含 $this->notify(new Notifications\VerifyEmail); 否则它不会使用 Notifiable 特性,因此不会发送任何电子邮件。有关详细信息,请查看 Laravel framework repository

中的方法