Khôi phục mật khẩu

Giới thiệu

Bạn có muốn bắt đầu nhanh không? Chỉ cần chạy php artisan make:auth trong một project mới. Khi đó, vào trình duyệt gõ địa chỉ http://your-app.dev/register hoặc bất kỳ URL được gán cho ứng dụng. Đó là hai lệnh để sử dụng scaffolding cho việc xác thực tài khoản ứng dụng của bạn!

Hầu hết các ứng dụng web đều cung cấp cách khôi phục mật khẩu khi người dùng quên. Thay vì bắt bạn thực hiện tích hợp nó cho mỗi ứng dụng, Laravel cung cấp phương thức khá tiện về việc nhắc nhở mật khẩu và thực hiện khôi phục mật khẩu.

Trước khi sử dụng tính năng khôi phục mật khẩu của Laravel, người dùng của bạn phải sử dụng Illuminate\Notifications\Notifiable trait.

Những chú ý về database

Để bắt đầu, hãy chắc chắn model App\User model tích hợp Illuminate\Contracts\Auth\CanResetPassword . Tất nhiên, model App\User được thêm bởi framework đẽ được tích hợp interface này, và sử dụng Illuminate\Auth\Passwords\CanResetPassword trait để thêm vào phương thức cần thiết để thực hiện interface.

Tạo ra bảng reset token

Tiếp theo, một bảng cần được tạo ra để lưu reset token của mật khẩu. File migration cho bảng này đã được thêm vào bởi framework, nó nằm trong thư mục database/migrations. Vì vậy, tất cả bạn cần làm là chạy lệnh sau để migration database:

php artisan migrate

Routing

Laravel gồm class Auth\ForgotPasswordController và class Auth\ResetPasswordController chứa những logic cần thiết để gửi link password reset vào e-mail cho việc khôi phục mật khẩu. Tất cả route cần làm việc đó được tạo ra bằng lệnh make:auth Artisan:

php artisan make:auth

Views

Một lần nữa, Laravel sẽ tạo ra tất cả những view cần thiết cho việc khôi phục mật khẩu khi lệnh make:auth được thực thi. Những view này được lưu tại thư mục resources/views/auth/passwords. Bạn có thể tự do tùy biến nó trong ứng dụng của bạn.

Sau khi khôi phục mật khẩu

Khi route và view được định nghĩa để khôi phục mật khẩu người dùng, bạn có thể truy cập route bằng trình duyệt tại địa chỉ /password/reset. Controller ForgotPasswordController được thêm bởi framework đã chứa logic để gửi password reset vào mail, trong khi ResetPasswordController chứa logic để khôi phục lại mật khẩu của người dùng.

Sau khi khôi phục mật khẩu, người dùng sẽ tự động đăng nhập và chuyển đến trang /home. Bạn có thể tùy biến nó và chuyển đến trang khác bằng thuộc tính redirectTo trong ResetPasswordController:

protected $redirectTo = '/dashboard';

Mặc định, password reset tokens sẽ hết hạn trong vòng 1 giờ. Bạn có thể thay đổi hạn password reset expire trong file config/auth.php.

Tùy biến

Tùy biến authentication guard

Trong file auth.php, bạn có thể cấu hình nhiều "guards",nó để sử dụng để định nghĩa xác thực nhiều bảng người dùng. Bạn có thể tùy biến bao gồm ResetPasswordController sử dụng guard bạn chọn ghi đè phương thức guard trong controller. Phương thức trả về một thể hiện guard:

use Illuminate\Support\Facades\Auth;

protected function guard()
{
    return Auth::guard('guard-name');
}

Tùy biến password Broker

Trong file auth.php, bạn có thể cấu hình nhiều "brokers", nó để sử dụng để khôi phục mật khẩu nhiều bảng người dùng. Bạn có thể tùy biến bao gồm ForgotPasswordControllerResetPasswordController sử dụng broker bạn chọn ghi đè phương thức broker:

use Illuminate\Support\Facades\Password;

/**
 * Get the broker to be used during password reset.
 *
 * @return  PasswordBroker
 */
protected function broker()
{
    return Password::broker('name');
}

Tùy biến Reset Email

Bạn có thể dễ dàng sửa thông báo gửi link password reset cho người dùng. Để bắt đầu, ghi đè phương thức sendPasswordResetNotification trong model User. Trong phương thức này, bạn có thể gửi thông báo cho bất cứ lớp thông báo nào bạn thích. $token là tham số thứ nhất của phương thức:

/**
 * Send the password reset notification.
 *
 * @param    string  $token
 * @return  void
 */
public function sendPasswordResetNotification($token)
{
    $this->notify(new ResetPasswordNotification($token));
}
Nguồn: https://laravel.com/docs/5.3/passwords