Заменить пароль reset почтовый шаблон с настраиваемым шаблоном laravel 5.3
Я выполнил команду laravel для системы аутентификации, php artisan make:auth
сделал систему аутентификации для моего приложения и почти все работает.
Теперь, когда я использую забытый пароль, и он отправляет мне токен на мой идентификатор почты, я вижу, что шаблон содержит laravel и некоторые другие вещи, которые я могу изменить или опустить, если быть точным, я хочу, чтобы мой пользовательский шаблон там будет использоваться.
Я посмотрел на контроллеры и их исходные файлы, но я не могу найти шаблон или код, отображающий html в письме.
Как мне это сделать?
Как мне изменить его?
Это шаблон по умолчанию, который приходит от laravel к почте.
![введите описание изображения здесь]()
Ответы
Ответ 1
Выполните следующую команду в терминале, и два шаблона электронной почты будут скопированы в вашу папку resources/vendor/notifications. Затем вы можете изменить шаблоны.
php artisan vendor:publish --tag=laravel-notifications
Вы можете прочитать больше об Notifications
в Документах Laravel.
Ответ 2
Просто голова: в дополнение к предыдущему ответу, есть дополнительные шаги, если вы хотите изменить строки уведомлений, например You are receiving this...
и т.д. Ниже приведено пошаговое руководство.
Вам понадобится переопределить метод по умолчанию sendPasswordResetNotification
по умолчанию User
.
Почему? Потому что строки вытягиваются из Illuminate\Auth\Notifications\ResetPassword.php
. Изменение его в ядре означает, что ваши изменения будут потеряны во время обновления Laravel.
Чтобы сделать это, добавьте следующее в свою модель User
.
use App\Notifications\PasswordReset; // Or the location that you store your notifications (this is default).
/**
* Send the password reset notification.
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new PasswordReset($token));
}
Наконец, создать это уведомление:
php artisan make:notification PasswordReset
И пример этого содержимого уведомления:
/**
* The password reset token.
*
* @var string
*/
public $token;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct($token)
{
$this->token = $token;
}
/**
* Get the notification delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Build the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->line('You are receiving this email because we received a password reset request for your account.') // Here are the lines you can safely override
->action('Reset Password', url('password/reset', $this->token))
->line('If you did not request a password reset, no further action is required.');
}
Ответ 3
Вы также можете достичь этого, создав свой собственный почтовый шаблон и отправив ссылку Reset самостоятельно, используя php mail()
или или Laravel Mail Facade
, но сначала вам нужно будет создать токен Reset
1) use Illuminate\Contracts\Auth\PasswordBroker;
$user = User::where('email', $email)->first();
if ($user) {
//so we can have dependency
$password_broker = app(PasswordBroker::class);
//create reset password token
$token = $password_broker->createToken($user);
DB::table('password_resets')->insert(['email' => $user->email, 'token' => $token, 'created_at' => new Carbon]);
//Send the reset token with your own template
//It can be like $link = url('/').'/password/reset/'.$token;
}
Ответ 4
Я закончил тем, что использовал Фасад Mail
в User
модели..
public function sendPasswordResetNotification($token){
// $this->notify(new MyCustomResetPasswordNotification($token)); <--- remove this, use Mail instead like below
$data = [
$this->email
];
Mail::send('email.reset-password', [
'fullname' => $this->fullname,
'reset_url' => route('user.password.reset', ['token' => $token, 'email' => $this->email]),
], function($message) use($data){
$message->subject('Reset Password Request');
$message->to($data[0]);
});
}