Laravel-如何在密码重置通知电子邮件中显示用户名

问题描述 投票:0回答:3

我正在使用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!'
        ]);
    }

App \ Notifications \ 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 [
            //
        ];
    }
}

用户表中的字段是:

名字,姓氏,电子邮件,密码

我正在尝试在密码重设通知电子邮件中添加用户的名字。目前,Laravel通知电子邮件开始如下:

你好!

我想将其更改为

你好所罗门!

我该如何实现?

laravel
3个回答
2
投票

通过使用

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

$notifiable中的toMail变量是用户模型的对象,因此您可以在邮件中显示用户名。

简单地添加一个经过修改的->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
投票

根据docs,您可以将->greeting('Hello!')放在toMail方法中。您可以将用户详细信息传递给此类,并在greeting方法中显示用户名


0
投票

您可以从控制器传递变量。

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.');
}
© www.soinside.com 2019 - 2024. All rights reserved.