【问题标题】:Laravel MustVerifyEmail is not sending e-mailLaravel MustVerifyEmail 不发送电子邮件
【发布时间】:2019-03-15 14:56:47
【问题描述】:

我目前正在使用 Laravel 5.7 开发一个项目。当我在 User 模型中实现 MustVerifyEmail 类时,应用程序不会按预期发送电子邮件。案例是:

1) 我在这里遵循了 Laravel 文档:https://laravel.com/docs/5.7/verification

2)我使用https://mailtrap.io测试功能,但没有收到应用的验证邮件。

3) 我尝试使用Auth::routes() 而不是Auth::routes(['verify' => true]) 并期待错误,但没有发生错误,应用程序只是在用户注册后将我重定向到主页。

这是我的User 模型:

<?php
namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'first_name', 'last_name', 'email', 'password', 'phone_number', 'username', 'role'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token'
    ];

    public function freelancer()
    {
        return $this->hasOne('App\Freelancer', 'freelancer_id', 'id');
    }

    public function employer()
    {
        return $this->hasOne('App\Employer', 'employer_id', 'id');
    }
}

这是我在RegisterController.php 中的create() 函数:

protected function create(array $data)
{
    if ($data['role'] == 'freelancer') {
        $user = User::create([
            'first_name' => $data['first_name'],
            'last_name' => $data['last_name'],
            'email' => $data['email'],
            'phone_number' => $data['phone_number'],
            'username' => $data['username'],
            'password' => Hash::make($data['password']),
            'role' => $data['role'],
        ])->freelancer()->create([
            'overview_description' => '',
        ]);
    } else {
        $user = User::create([
            'first_name' => $data['first_name'],
            'last_name' => $data['last_name'],
            'email' => $data['email'],
            'phone_number' => $data['phone_number'],
            'username' => $data['username'],
            'password' => Hash::make($data['password']),
            'role' => $data['role'],
        ])->employer()->create([
            'overview_description' => '',
            'number_of_employees' => 0,
        ]);
    }

    return $user;
}

我的FreelancerEmployer 模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Freelancer extends Model
{
    protected $table = 'freelancer';

    public $timestamps = false;

    protected $fillable = [
      'overview_description'
    ];
}

--

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Employer extends Model
{
    protected $table = 'employer';

    public $timestamps = false;

    protected $fillable = [
      'overview_description', 'number_of_employees'
    ];
}

我认为RegisterController 有问题,但我不确定它在哪里。有没有逻辑错误?

【问题讨论】:

  • 你的邮箱配置了吗? laravel.com/docs/5.7/mail
  • 是的,当我开始一个新的 laravel 项目时,电子邮件工作正常。问题只出现在本项目中。

标签: php laravel email-verification laravel-5.7


【解决方案1】:

你忘记在你的用户模型中使用Illuminate\Auth\MustVerifyEmail trait,这个trait定义了负责发送验证邮件的sendEmailVerificationNotification方法。

use Illuminate\Contracts\Auth\MustVerifyEmail as MustVerifyEmailContract; // this is an interface
use Illuminate\Auth\MustVerifyEmail; // this the trait

class User extends Authenticatable implements MustVerifyEmail
{
    use MustVerifyEmail, Notifiable;

    // all the other code goes here

}

【讨论】:

  • 应用程序仍然没有发送任何验证电子邮件。但是,当我在 verify.blade.php 请求另一封电子邮件时,我能够收到该电子邮件。
【解决方案2】:

我更新RegisterController.php中的create函数后问题解决了如下:

  protected function create(array $data)
  {
     $user = User::create([
    'first_name' => $data['first_name'],
    'last_name' => $data['last_name'],
    'email' => $data['email'],
    'phone_number' => $data['phone_number'],
    'username' => $data['username'],
    'password' => Hash::make($data['password']),
    'role' => $data['role'],
    ]);

    return $user;
  }

关于FreelancerEmployer实例的创建过程,我放在邮箱验证之后。

【讨论】:

    猜你喜欢
    • 2022-08-13
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2015-10-01
    相关资源
    最近更新 更多