Tài liệu của Laravel đề cập rằng bạn có thể tùy chỉnh Mẫu còn lại mật khẩu, nhưng không giải thích cách bạn thực sự làm điều đó. Điều đó nói rằng, tôi sẽ cho rằng bạn đã có xác thực và đã xuất bản chế độ xem xác thực của mình. Điều đó được đề cập rất tốt trong tài liệu
Như đã nêu trong tài liệu, bạn sẽ cần ghi đè lên phương thức sendPasswordResetNotification
trong mô hình Người dùng
public function sendPasswordResetNotification[$token]
{
$this->notify[new ResetPasswordNotification[$token]];
}
Bây giờ là phần thú vị, Laravel sử dụng Thông báo để gửi email Đặt lại mật khẩu. Vì vậy, chúng tôi sẽ phải tạo một thông báo mới có tên là ResetPasswordNotification
php artisan make:notification ResetPasswordNotification
Bên trong lớp ResetPasswordNotification của bạn và trong phương thức toMail, chúng ta cần hai thứ, một URL được đặt lại và chính Email đó
URL đặt lại được tạo bằng Mã thông báo và địa chỉ email của người dùng
Mã thông báo được tự động chuyển đến thông báo cho chúng tôi trong mô hình Người dùng nhưng để cung cấp mã thông báo cho phương thức toMail. Chúng ta sẽ phải thêm nó vào hàm tạo
private $token;
public function __construct[$data]
{
$this->token = $data;
}
Và đừng quên khai báo tài sản của bạn là riêng tư
Email của người dùng là một phần của tham số $notifiable
, vì vậy chúng ta có thể gọi $notifiable->getEmailForPasswordReset[]
$url = url[config['app.url'] . route['password.reset', [
'token' => $this->token,
'email' => $notifiable->getEmailForPasswordReset[],
], false]];
Tiếp theo, chúng ta phải tự xây dựng Email, tạo một
php artisan make:notification ResetPasswordNotification
0 mớireturn [new MailMessage]->view['emails.user.reset', ['url' => $url]];
Tùy thuộc vào mẫu email của bạn, cá nhân tôi đã chọn sử dụng Blade và HTML thông thường, Chỉ cần hiển thị URL trong mẫu của bạn
php artisan make:notification ResetPasswordNotification
1Phương thức toMail đã hoàn thành bây giờ trông như thế này
public function toMail[$notifiable]
{
$url = url[config['app.url'] . route['password.reset', [
'token' => $this->token,
'email' => $notifiable->getEmailForPasswordReset[],
], false]];
return [new MailMessage]->view['emails.user.reset', ['url' => $url]];
}
Tôi chắc rằng bạn có thể thấy rằng đây thực sự là một bước đơn giản để đảm bảo tính nhất quán cho ứng dụng của bạn và tôi hy vọng điều này sẽ giúp ích cho bạn. Tôi biết khi tôi đang cố gắng tìm hiểu điều này, tôi đã không quen thuộc 100% với MailMessage hoặc Thông báo
Nếu bạn đang sử dụng xác thực mặc định của Laravel
để quản lý người dùng của mình, nhưng muốn thay đổi URI và văn bản trong email Đặt lại mật khẩu mặc định. Chà, có một lối thoát mà chúng ta có thể đạt được điều đó trong Laravel
Bố cục & Văn bản Mặc định
Tạo Thông báo mới
Hãy bắt đầu bằng cách tạo Thông báo mới cho người gửi email tùy chỉnh mới của chúng ta với laravel artisan CLI
php artisan make:notification MailResetPasswordNotification
Bây giờ bạn có thể tìm thấy tệp này dưới tên app\Notifications
. Ngay trong phương thức toMail
, chúng ta có thể thực hiện các sửa đổi của mình
Ở đây, chúng tôi đã sửa đổi URI hành động, thêm chế độ xem sẽ được tải cho email của chúng tôi, thêm một vài dòng và tệp đính kèm để email Đặt lại của chúng tôi trông bắt mắt hơn
Ghi đè phương thức sendPasswordResetNotification
Theo mặc định, mô hình Người dùng sử dụng đặc điểm canResetPassword
để đặt lại mật khẩu, bạn có thể tìm thấy tệp này bên dưới
/** * Send the password reset notification. * * @param string $token * @return void */public function sendPasswordResetNotification[$token]{ $this->notify[new App\Notifications\MailResetPasswordNotification[$token]];}0
Bây giờ là lúc yêu cầu
/** * Send the password reset notification. * * @param string $token * @return void */public function sendPasswordResetNotification[$token]{ $this->notify[new App\Notifications\MailResetPasswordNotification[$token]];}1 của chúng tôi sử dụng thông báo tùy chỉnh của chúng tôi thay vì thông báo mặc định. Hãy ghi đè lên
sendPasswordResetNotification