Laravel - Как отобразить имя пользователя в пароле - PullRequest
0 голосов
/ 17 октября 2019

Я работаю над проектом, использующим Laravel-5.8 в качестве бэкэнда и Angular-7 в качестве внешнего интерфейса. Я отправляю уведомление по электронной почте для сброса пароля пользователю. Текущий, у меня есть:

PasswordResetController.php

    public function create(Request $request)
    {
        $request->validate([
            'email' => 'required|string|email',
        ]);
        $user = User::where('email', $request->email)->first();
        if (!$user)
            return response()->json([
                'message' => 'We can\'t find a user with that e-mail address.'
            ], 404);
        $passwordReset = PasswordReset::updateOrCreate(
            ['email' => $user->email],
            [
                'email' => $user->email,
                'token' => str_random(60)
             ]
        );
        if ($user && $passwordReset)
            $user->notify(
                new PasswordResetRequest($passwordReset->token)
            );
        return response()->json([
            'message' => 'We have e-mailed your password reset link!'
        ]);
    }

Приложение \ Уведомления \ PasswordReset:

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class PasswordResetRequest extends Notification
{
    use Queueable;

    protected $token;
    public function __construct($token)
    {
        $this->token = $token;
    }

    public function via($notifiable)
    {
        return ['mail'];
    }

    public function toMail($notifiable)
     {
        return (new MailMessage)
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', url('http://localhost:4200/#/reset-password-submit?token='.$this->token))
            ->line('If you did not request a password reset, no further action is required.');
    }

    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

Поля в пользовательской таблице:

first_name, last_name, email, password

Я пытаюсь добавить имя пользователя в электронном письме с уведомлением о сбросе пароля. В настоящее время электронные письма с уведомлениями Laravel начинаются так:

Hello!

Я хочу изменить его на

Hello Solomon!

Как мне этого добиться?

Ответы [ 3 ]

2 голосов
/ 17 октября 2019

Используя

$user->notify(
    new PasswordResetRequest($passwordReset->token)
);

переменная $notifiable в toMail является объектом модели пользователя, поэтому вы можете отобразить имя пользователя в почте.

Просто добавьтеметод chaned ->greeting() для удобного форматирования с вашей строкой приветствия в качестве параметра

return (new MailMessage)
    ->greeting('Hello '.$notifiable->first_name.' '.$notifiable->last_name)
    ->line('You are receiving this email because we received a password reset request for your account.')
    ->action('Reset Password', url('http://localhost:4200/#/reset-password-submit?token='.$this->token))
    ->line('If you did not request a password reset, no further action is required.');
0 голосов
/ 17 октября 2019

Вы можете передать переменную из контроллера.

if ($user && $passwordReset)
$user->notify(
    new PasswordResetRequest($passwordReset->token, $user)
);

И затем вам нужно получить доступ таким образом. (App\Notifications\PasswordReset:)

protected $token;
protected $user;

public function __construct($token, $user)
{
    $this->token = $token;
    $this->user= $user;
}

public function toMail($notifiable)
{
    return (new MailMessage)
    ->greeting('Hello '.$this->user->first_name.' '.$this->user->last_name)
    ->line('You are receiving this email because we received a password reset request for your account.')
    ->action('Reset Password', url('http://localhost:4200/#/reset-password-submit?token='.$this->token))
    ->line('If you did not request a password reset, no further action is required.');
}
0 голосов
/ 17 октября 2019

Согласно документам , вы можете поместить ->greeting('Hello!') в ваш toMail метод. Вы можете передать данные пользователя этому классу и показать имя пользователя в методе greeting

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...