Laravel MustVerifyEmail не отправляет электронную почту - PullRequest
0 голосов
/ 10 октября 2018

Я сейчас работаю над проектом с Laravel 5.7.Поскольку я реализовал класс MustVerifyEmail в моей модели User, приложение не отправляет электронную почту, как ожидалось.Случай:

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');
    }
}

Это моя create() функция в RegisterController.php:

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;
}

Моя Freelancer и Employer модель:

<?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 что-то не так, но я не уверен, где это.Есть ли логическая ошибка?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Проблема решена после того, как я обновил функцию create в RegisterController.php следующим образом:

  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;
  }

Что касается процесса создания экземпляров Freelancer и Employer, я разместил его послеподтверждение по электронной почте.

0 голосов
/ 10 октября 2018

Вы забыли использовать черту Illuminate\Auth\MustVerifyEmail в своей модели пользователя, эта черта определяет метод 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

}
...