Trong các bài viết trước mình đã hướng dẫn các bạn các đăng ký người dùng mới, đăng nhập và đăng xuất hệ thống. Trong bài viết này mình sẽ hướng dẫn các bạn cách sử dụng PasswordController trong Laravel 5 để khôi phục mật khẩu với những người dùng quên mật khẩu.

1.Thiết lập route

Cũng giống như việc đăng ký người dùng mới và đăng nhập hệ thống, việc đầu tiên các bạn cần làm là kiểm tra thiết lập route để có thể gọi đến các Controller được xây dựng sẵn của Laravel. Các bạn vào file app/Http/routes.php và kiểm tra việc thiết lập route như hình sau:

image014

2.Kiểm tra model Users và bảng password_resets

Các bạn vào trong app\Users.php để kiểm tra xem model Users đã thực hiện implement contract Illuminate\Contracts\Auth\CanResetPassword chưa. Mặc định thì Laravel đã implement interface này và sử dụng trait Illuminate\Auth\Passwords\CanResetPassword để sử dụng các phương thức cần thiết.

image025

Tiếp theo đó, các bạn vào trong cơ sở dữ liệu và kiểm tra xem đã có bảng password_resets chưa. Mặc định thì bảng này đã được tạo ra khi bạn dùng câu lệnh php artisan:migrate khi tạo bảng users (Nếu chưa có thì các bạn chạy lệnh php artisan migrate).  Bảng này được dùng để lưu trữ các token khôi phục mật khẩu và có cấu trúc như sau:

image026

3.Cấu hình mail

Laravel cung cấp một API đơn giản, tiện dụng dựa trên thư viện của SwiftMailer. Laravel sử dụng các driver cho SMTP, Mailgun, Mandrill, AmazonSES, chức năng mail của PHP và sendmail để cho phép bạn có thể nhanh chóng gửi mail thông qua local host hoặc dựa trên các dịch vụ mail tùy thuộc vào lựa chọn của bạn.

Các bạn có thể cấu hình mail trong file app/config/mail.php để thiết lập driver, host, port, địa chỉ người gửi, mã hóa,… Trong ví dụ này mình sử dụng driver smtp và dịch vụ mail của Google thì sẽ để thiết lập như sau:

image027

Các bạn để ý hầu hết các trường đều sử dụng các tham số từ file .env và một trường có tên là ‘pretend’ được sử dụng để các bạn có thể mô phỏng việc gửi mail trên localhost và sẽ được ghi vào file log của Laravel (được đặt tại storage/logs/laravel.log) nếu các bạn muốn gửi mail thật thì để theo mặc định là false. Tiếp theo các bạn mở file .env và cấu hình như sau:

image028

Các bạn có thể tham khảo thêm và các driver và host mail khác tại http://laravel.com/docs/5.1/mail. Sau khi cấu hình xong thì các bạn mở console vào thư mục của ứng dụng và chạy lênh php artisan config:cache để xóa cache và cập nhật cấu hình mới.

image029

4.Xây dựng view khôi phục mật khẩu

Các bạn tạo file password.blade.php và đặt nó trong thư mục resources/views/auth như sau:

image030

Giống như view đăng ký và đăng nhập bạn có thể tùy biến style của view password.blade.php theo ý mình. Ở đây mình tạo ra nội dung cho view password.blade.php như sau:

image031

Khi người dùng gửi yêu cầu khôi phục lại mật khẩu, họ sẽ nhận được một email với một đường dẫn gọi đến phương thức getReset (thường đặt trong route /password/reset) ở trong PasswordController.

Tiếp theo bạn sẽ tạo ra view chứa nội dung email sẽ gửi tới người dùng sau khi họ gửi yêu cầu và đặt tên view này là password.blade.php và đặt nó trong thư mục resources/views/emails.

image032

View này sẽ nhận biến $token chứa token khôi phục mật khẩu tương ứng với yêu cầu khôi phục mật khẩu của người dùng. Ví dụ về nội dung của view password.blade.php như sau:

image033

Sau khi tạo xong view, bạn có thể vào đường dẫn /password/email để truy cập vào form gửi yêu cầu khôi phục mật khẩu như sau:

image034
Nếu thông tin email được cung cấp trùng với bản ghi được tìm thấy trong bảng users thì một bản ghi như sau sẽ được thêm vào bảng password_resets:

image035

Cùng với việc update bản ghi trong bảng password_resets thì một email sẽ được gửi đến địa chỉ được cung cấp bởi người dùng. Email này sẽ bao gồm đường dẫn tới view đặt mật khẩu mới cùng với token khôi phục mật khẩu được tìm thấy trong bảng password_resets.

image036

Việc tiếp theo các bạn cần làm đó là xây dựng view đặt lại mật khẩu cho người dùng. Các bạn tạo file reset.blade.php và đặt trong thư mục resources/views/auth như sau:

image038

Ví dụ về nội dung của file reset.blade.php:

image039

Sau đó khi các bạn ấn vào link khôi phục mật khẩu trong mail vừa được gửi thì sẽ được dẫn tới view reset.blade.php như sau:

image040

Các bạn gõ lại địa chỉ mail đã yêu cầu gửi khôi phục mật khẩu và đặt lại mật khẩu mới rồi gửi yêu cầu thì sẽ hoàn thành việc khôi phục mật khẩu.

Trong bài viết này mình đã hướng dẫn các bạn cách sử dụng PasswordController trong Laravel 5 được xây dựng sẵn của Laravel để khôi phục mật khẩu trong trường hợp người dùng quên mật khẩu. Chúc các bạn thành công ^_^

Gửi bình luận bằng Facebook

Bài viết liên quan: