Rumah pembangunan bahagian belakang tutorial php Menguasai Penyesuaian Tetapan Semula Kata Laluan Laravel: Panduan Komprehensif

Menguasai Penyesuaian Tetapan Semula Kata Laluan Laravel: Panduan Komprehensif

Sep 01, 2024 am 06:31 AM

Mastering Laravel Password Reset Customization: A Comprehensive Guide

pengenalan

Fungsi tetapan semula kata laluan ialah komponen penting bagi mana-mana aplikasi web moden. Walaupun Laravel menyediakan penyelesaian luar biasa yang teguh, ada kalanya anda perlu menyesuaikan proses ini untuk memenuhi keperluan khusus atau meningkatkan pengalaman pengguna. Dalam tutorial ini, kami akan menyelam lebih mendalam ke dalam menyesuaikan aliran kerja tetapan semula kata laluan Laravel, merangkumi segala-galanya daripada pengubahsuaian asas kepada teknik lanjutan.

Sejarah Ringkas Pengesahan Laravel

Sebelum kita mendalami penyesuaian, mari kita lakukan perjalanan pantas ke lorong ingatan untuk memahami bagaimana penyelesaian pengesahan Laravel telah berkembang:

  1. UI Laravel: Lelaran pertama bagi penyelesaian pengesahan lengkap dalam Laravel, yang berkhidmat dengan baik kepada komuniti selama bertahun-tahun.
  2. Laravel Breeze: Dilahirkan daripada populariti CSS Tailwind yang semakin meningkat, Breeze menawarkan perancah pengesahan yang minimum, ringan dan moden.
  3. Laravel Jetstream: Bagi mereka yang memerlukan ciri yang lebih maju, Jetstream telah diperkenalkan, meliputi pelbagai jenis pengesahan termasuk 2FA dan fungsi pengurusan pasukan.
  4. Laravel Fortify: Bahagian belakang pengesahan tanpa kepala yang boleh digunakan dengan mana-mana bahagian hadapan, memberikan fleksibiliti kepada pembangun untuk melaksanakan UI mereka sendiri.

Memahami Aliran Tetapan Semula Kata Laluan Laravel

Proses tetapan semula kata laluan Laravel biasanya melibatkan langkah berikut:

  1. Pengguna meminta tetapan semula kata laluan
  2. Token dijana dan disimpan
  3. E-mel dihantar kepada pengguna dengan pautan tetapan semula (URL yang ditandatangani)
  4. Pengguna mengklik pautan dan memasukkan kata laluan baharu
  5. Kata laluan dikemas kini dan token tidak sah

Walaupun aliran ini berfungsi dengan baik untuk kebanyakan aplikasi, anda mungkin mahu menyesuaikan pelbagai aspek proses ini agar lebih sesuai dengan keperluan anda.

Apa yang Kami Bina

Dalam tutorial ini, kami akan mencipta aplikasi Laravel SaaS (minimum) kosong dengan aliran tetapan semula kata laluan tersuai. Kami akan meliputi:

  • Menyediakan aplikasi Laravel baharu dengan Breeze
  • Menyesuaikan URL tetapan semula kata laluan
  • Mengubah suai kandungan e-mel tetapan semula kata laluan
  • Menambahkan pemberitahuan kejayaan selepas penetapan semula kata laluan
  • Melaksanakan dan menyesuaikan ujian automatik untuk perubahan kami

Bermula

Mari kita mulakan dengan menyediakan aplikasi Laravel baharu:

composer create-project laravel/laravel password-reset-demo
cd password-reset-demo
Salin selepas log masuk

Sebelum kita meneruskan, mari kita mulakan Git untuk kawalan versi:

git init
git add .
git commit -m "Initial commit"
Salin selepas log masuk

Sekarang, mari pasang Laravel Breeze untuk mendapatkan perancah pengesahan asas:

composer require laravel/breeze --dev
php artisan breeze:install
Salin selepas log masuk

Apabila digesa, pilih tindanan yang paling sesuai dengan keperluan anda. Untuk tutorial ini, kami akan menggunakan Livewire:

php artisan breeze:install

  Which Breeze stack would you like to install?
❯ livewire

  Would you like dark mode support? (yes/no) [no]
❯ no

  Which testing framework do you prefer? [PHPUnit]
❯ Pest
Salin selepas log masuk

Selepas pemasangan, mari lakukan perubahan kami:

git add .
git commit -m "Add Authentication and Pages"
Salin selepas log masuk

Sekarang, sediakan pangkalan data anda dan jalankan migrasi:

php artisan migrate
Salin selepas log masuk

Pasang dan susun aset bahagian hadapan anda:

npm install
npm run dev
Salin selepas log masuk

Pada ketika ini, kami mempunyai aplikasi Laravel asas dengan fungsi pengesahan. Mari jalankan ujian untuk memastikan semuanya berfungsi seperti yang diharapkan:

php artisan test
Salin selepas log masuk

Anda sepatutnya melihat semua ujian lulus, memberi kami lampu hijau untuk meneruskan penyesuaian kami.

Menyesuaikan URL Tetapan Semula Kata Laluan

Secara lalai, Laravel (menggunakan Breeze) menggunakan URL standard untuk tetapan semula kata laluan (/reset-password). Mari sesuaikan ini dalam AppServiceProvider kami:

<?php

namespace App\Providers;

use App\Models\User;
use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        ResetPassword::createUrlUsing(function (User $user, string $token) {
            return url(route('password.reset', [
                'token' => $token,
                'email' => $user->getEmailForPasswordReset(),
            ], false));
        });
    }
}
Salin selepas log masuk

Penyesuaian ini membolehkan anda mengubah suai struktur URL tetapan semula, menambah parameter tambahan atau malah menunjuk ke domain yang berbeza sama sekali jika perlu. Contohnya, anda boleh menukarnya kepada:

return "https://account.yourdomain.com/reset-password?token={$token}&email={$user->getEmailForPasswordReset()}";
Salin selepas log masuk

Mengubah suai E-mel Tetapan Semula Kata Laluan

Seterusnya, mari sesuaikan kandungan e-mel tetapan semula kata laluan. Kami akan melakukan ini dengan menambah pada AppServiceProvider kami:

use Illuminate\Notifications\Messages\MailMessage;

// ...

public function boot(): void
{
    // ... previous customizations

    ResetPassword::toMailUsing(function (User $user, string $token) {
        $url = url(route('password.reset', [
            'token' => $token,
            'email' => $user->getEmailForPasswordReset(),
        ], false));

        return (new MailMessage)
            ->subject(config('app.name') . ': ' . __('Reset Password Request'))
            ->greeting(__('Hello!'))
            ->line(__('You are receiving this email because we received a password reset request for your account.'))
            ->action(__('Reset Password'), $url)
            ->line(__('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.' . config('auth.defaults.passwords') . '.expire')]))
            ->line(__('If you did not request a password reset, no further action is required.'))
            ->salutation(__('Regards,') . "\n" . config('app.name') . " Team");
    });
}
Salin selepas log masuk

Nota: Fungsi __() ialah pembantu untuk penyetempatan, membolehkan terjemahan mudah rentetan dalam aplikasi anda.

Menambah Pemberitahuan Kejayaan Tetapan Semula Kata Laluan

Untuk meningkatkan pengalaman dan keselamatan pengguna, mari tambahkan pemberitahuan yang dihantar selepas penetapan semula kata laluan berjaya. Mula-mula, buat pemberitahuan baharu:

php artisan make:notification PasswordResetSuccessfullyNotification
Salin selepas log masuk

Edit pemberitahuan yang baru dibuat:

<?php

namespace App\Notifications;

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

class PasswordResetSuccessfullyNotification extends Notification implements ShouldQueue
{
    use Queueable;

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

    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->subject('Password Reset Successful')
            ->greeting('Hello!')
            ->line('Your password has been successfully reset.')
            ->line('If you did not reset your password, please contact support immediately.')
            ->action('Login to Your Account', url('/login'))
            ->line('Thank you for using our application!');
    }
}
Salin selepas log masuk

Sekarang, buat pendengar untuk acara PasswordReset:

php artisan make:listener SendPasswordResetSuccessfullyNotification --event=PasswordReset
Salin selepas log masuk

Kemas kini pendengar:

<?php

namespace App\Listeners;

use App\Notifications\PasswordResetSuccessfullyNotification;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendPasswordResetSuccessfullyNotification implements ShouldQueue
{
    public function handle(PasswordReset $event)
    {
        $event->user->notify(new PasswordResetSuccessfullyNotification());
    }
}
Salin selepas log masuk

Ingat untuk mendaftarkan pendengar ini dalam EventServiceProvider anda.

Menguji Penyesuaian Kami

Ujian adalah penting untuk memastikan penyesuaian kami berfungsi seperti yang diharapkan. Kemas kini ujian tetapan semula kata laluan sedia ada dalam ujian/Feature/Auth/PasswordResetTest.php:

<?php

namespace Tests\Feature\Auth;

use App\Models\User;
use App\Notifications\PasswordResetSuccessfullyNotification;
use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Support\Facades\Notification;
use Tests\TestCase;

class PasswordResetTest extends TestCase
{
    public function test_reset_password_link_can_be_requested(): void
    {
        Notification::fake();

        $user = User::factory()->create();

        $this->post('/forgot-password', ['email' => $user->email]);

        Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) {
            $response = $this->get($notification->toMail($user)->actionUrl);
            $this->assertStringContainsString('Reset Password', $response->getContent());
            return true;
        });
    }

    public function test_password_can_be_reset_with_valid_token(): void
    {
        Notification::fake();

        $user = User::factory()->create();

        $this->post('/forgot-password', ['email' => $user->email]);

        Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) {
            $token = $notification->token;

            $response = $this->post('/reset-password', [
                'token' => $token,
                'email' => $user->email,
                'password' => 'new-password',
                'password_confirmation' => 'new-password',
            ]);

            $response->assertSessionHasNoErrors();

            Notification::assertSentTo($user, PasswordResetSuccessfullyNotification::class);

            return true;
        });
    }

    public function test_reset_password_email_contains_custom_content(): void
    {
        Notification::fake();

        $user = User::factory()->create();

        $this->post('/forgot-password', ['email' => $user->email]);

        Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) {
            $mailMessage = $notification->toMail($user);
            $this->assertStringContainsString('Hello!', $mailMessage->greeting);
            $this->assertStringContainsString('Regards,', $mailMessage->salutation);
            return true;
        });
    }
}
Salin selepas log masuk

Conclusion

Customizing Laravel's password reset workflow allows you to create a more tailored and user-friendly experience for your application. We've covered how to modify the reset URL, customize the email content, add a success notification, and ensure everything works through automated testing.

Remember, while customization can be powerful, it's essential to maintain security best practices throughout the process. Always validate user input, use secure token generation and storage methods, and follow Laravel's security recommendations.

Some additional considerations for further improvements:

  1. Implement rate limiting on password reset requests to prevent abuse.
  2. Add logging for successful and failed password reset attempts for security auditing.
  3. Consider implementing multi-channel notifications (e.g., SMS, push notifications) for critical security events like password resets.
  4. Regularly review and update your password policies to align with current security best practices.

For more advanced topics and Laravel insights, check out the official Laravel documentation and stay tuned to the Laravel community resources for more in-depth tutorials and best practices.

Happy coding, and may your Laravel applications be ever secure and user-friendly!

Atas ialah kandungan terperinci Menguasai Penyesuaian Tetapan Semula Kata Laluan Laravel: Panduan Komprehensif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1668
14
Tutorial PHP
1273
29
Tutorial C#
1256
24
PHP: Bahasa utama untuk pembangunan web PHP: Bahasa utama untuk pembangunan web Apr 13, 2025 am 12:08 AM

PHP adalah bahasa skrip yang digunakan secara meluas di sisi pelayan, terutamanya sesuai untuk pembangunan web. 1.PHP boleh membenamkan HTML, memproses permintaan dan respons HTTP, dan menyokong pelbagai pangkalan data. 2.PHP digunakan untuk menjana kandungan web dinamik, data borang proses, pangkalan data akses, dan lain -lain, dengan sokongan komuniti yang kuat dan sumber sumber terbuka. 3. PHP adalah bahasa yang ditafsirkan, dan proses pelaksanaan termasuk analisis leksikal, analisis tatabahasa, penyusunan dan pelaksanaan. 4.Php boleh digabungkan dengan MySQL untuk aplikasi lanjutan seperti sistem pendaftaran pengguna. 5. Apabila debugging php, anda boleh menggunakan fungsi seperti error_reporting () dan var_dump (). 6. Mengoptimumkan kod PHP untuk menggunakan mekanisme caching, mengoptimumkan pertanyaan pangkalan data dan menggunakan fungsi terbina dalam. 7

Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1? Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1? Apr 17, 2025 am 12:06 AM

Dalam php, kata laluan_hash dan kata laluan 1) password_hash menjana hash yang mengandungi nilai garam untuk meningkatkan keselamatan. 2) Kata Laluan_verify Sahkan kata laluan dan pastikan keselamatan dengan membandingkan nilai hash. 3) MD5 dan SHA1 terdedah dan kekurangan nilai garam, dan tidak sesuai untuk keselamatan kata laluan moden.

PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular Apr 14, 2025 am 12:13 AM

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

PHP dalam Tindakan: Contoh dan aplikasi dunia nyata PHP dalam Tindakan: Contoh dan aplikasi dunia nyata Apr 14, 2025 am 12:19 AM

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan? Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan? Apr 17, 2025 am 12:25 AM

Jenis PHP meminta untuk meningkatkan kualiti kod dan kebolehbacaan. 1) Petua Jenis Skalar: Oleh kerana Php7.0, jenis data asas dibenarkan untuk ditentukan dalam parameter fungsi, seperti INT, Float, dan lain -lain. 2) Return Type Prompt: Pastikan konsistensi jenis nilai pulangan fungsi. 3) Jenis Kesatuan Prompt: Oleh kerana Php8.0, pelbagai jenis dibenarkan untuk ditentukan dalam parameter fungsi atau nilai pulangan. 4) Prompt jenis yang boleh dibatalkan: membolehkan untuk memasukkan nilai null dan mengendalikan fungsi yang boleh mengembalikan nilai null.

Relevannya PHP: Adakah ia masih hidup? Relevannya PHP: Adakah ia masih hidup? Apr 14, 2025 am 12:12 AM

PHP masih dinamik dan masih menduduki kedudukan penting dalam bidang pengaturcaraan moden. 1) kesederhanaan PHP dan sokongan komuniti yang kuat menjadikannya digunakan secara meluas dalam pembangunan web; 2) fleksibiliti dan kestabilannya menjadikannya cemerlang dalam mengendalikan borang web, operasi pangkalan data dan pemprosesan fail; 3) PHP sentiasa berkembang dan mengoptimumkan, sesuai untuk pemula dan pemaju yang berpengalaman.

PHP dan Python: Paradigma yang berbeza dijelaskan PHP dan Python: Paradigma yang berbeza dijelaskan Apr 18, 2025 am 12:26 AM

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

PHP vs Bahasa Lain: Perbandingan PHP vs Bahasa Lain: Perbandingan Apr 13, 2025 am 12:19 AM

PHP sesuai untuk pembangunan web, terutamanya dalam pembangunan pesat dan memproses kandungan dinamik, tetapi tidak baik pada sains data dan aplikasi peringkat perusahaan. Berbanding dengan Python, PHP mempunyai lebih banyak kelebihan dalam pembangunan web, tetapi tidak sebaik python dalam bidang sains data; Berbanding dengan Java, PHP melakukan lebih buruk dalam aplikasi peringkat perusahaan, tetapi lebih fleksibel dalam pembangunan web; Berbanding dengan JavaScript, PHP lebih ringkas dalam pembangunan back-end, tetapi tidak sebaik JavaScript dalam pembangunan front-end.

See all articles