Mẹo Laravel - Một số mẹo nhỏ trong Laravel Authentication

Xin chào các bạn, hôm nay mình sẽ tiếp tục với một chủ đề không mấy xa lạ, nhưng cũng khiến không ít người đau đầu: Laravel Authentication. Trong mẹo này có thể giúp bạn có một cách viết code ngắn hơn, hoặc giúp bạn nhận ra được một số function tồn tại trong Laravel mà bạn chưa biết. Ngoài ra thì, việc đọc bài viết này không thể giúp bạn trong việc hoàn toàn thay thế việc đọc document của Laravel. Do đó, nếu bạn không hiểu khi đọc tài liệu hướng dẫn của Laravel, hãy cố gắng đọc thêm một vài lần nữa, mặc dù nó có thể dài hơn 700 trang, nhưng mà nó cũng là nơi khá tốt để bạn bắt đầu với dự án của mình.

Làm sao để đăng nhập khi bạn có user Id hoặc user Object?

Trước tiên bạn có thể đọc tài liệu tại đây: https://laravel.com/docs/8.x/authentication#other-authentication-methods

Trong trường hợp này, bạn có thể sử dụng Auth::login($userObject) để đăng nhập bằng user Object hoặc sử dụng Auth::loginUsingId(1); để đăng nhập bằng ID, nếu bạn có cả 2 trường hợp này.

Ngoài ra, bạn có thể sử dụng như sau: auth()->login($userObject);, bạn có thể sử dụng chúng trong môi trường test, hoặc đơn giản là tự động đăng nhập cho người dùng sau khi đã đăng ký thành công.

Làm sao để lấy Id của người dùng?

Bình thường chúng ta sẽ lấy bằng cách:

$userId = Auth::user()->id;

Cách này cũng khá tuyệt đấy, nhưng chúng ta vẫn có những cách khác để có thể lấy Id của người dùng:

$userId = Auth::id();
// Hoặc
$userId = auth()->id();

Trong hai trường hợp trên, mình sẽ gợi ý các bạn ưu tiên dùng helper auth() nhiều hơn là Facade Auth, vì helper bạn có thể sử dụng ở bất kỳ đâu, từ Controller đến view mà không cần phải use để import Facade vào.

Làm thế nào để kiểm tra user đã login trong blade

Có thể bình thường các bạn sẽ làm thế này:

@if (auth()->check())
  Đã đăng nhập
@else
  Chưa đăng nhập
@endif

Nhưng mà chúng ta lại sẽ có cách ngắn hơn như thế này:

@auth
  Đã đăng nhập
@else
  Chưa đăng nhập
@endauth

Hoặc bạn cũng có thể sử dụng @guest@endguest để kiểm tra người dùng không đăng nhập (khách).

Làm sao để kích hoạt email khi người dùng đăng ký mới tài khoản

Trong User model, chúng ta dùng MustVerifyEmail để thực hiện thao tính năng này.

use Illuminate\Contracts\Auth\MustVerifyEmail;
class User extends Authenticatable implements MustVerifyEmail 
{
  use Notifiable;
}

Tiếp đó, bạn vào trong tập tin app/Providers/EventServiceProvider.php để gọi sự kiện gửi mail

protected $listen = [
  Registered::class => [
    SendEmailVerificationNotification::class
  ]
]

Lúc này bạn có thể đọc thêm tài liệu trong Laravel để có thể sử dụng tốt chức năng này tại https://laravel.com/docs/8.x/verification

Làm thế nào để nhập mật khẩu xác minh ở trong một Router nào đó?

Bạn nếu sử dụng github sẽ thấy, khi bạn muốn phân quyền git cho một user nào đó, thì github sẽ yêu cầu bạn nhập mật khẩu để xác minh. Hoặc khi bạn thay đổi một phương thức bảo mật trên facebook, facebook cũng yêu cầu bạn nhập lại mật khẩu để xác minh. Vậy, làm cách nào để ta có thể dùng trên Laravel? Trong tài liệu của Laravel thì bạn có thể xem tại đây: https://laravel.com/docs/8.x/authentication#password-confirmation-protecting-routes

Tất cả những gì bạn cần đọc đều nằm ở đường dẫn phía trên, nhưng cách sử dụng cơ bản nhất thì thông qua một middleware có tên là password.confirm, khi bạn đặt middleware này vào trong router, nó sẽ dẫn tới một trang web để bạn có thể nhập mật khẩu xác minh trước khi tiếp tục truy cập vào router đó.

Làm thế nào để tạo một tài khoản người dùng mà không cần nhập theo form đăng ký?

Nếu bạn đã biết và đã sử dụng database factories thì không cần phải đọc tips này, nhưng nếu chưa thì đây có vẻ là một công cụ setup hiệu quả cho website của bạn sau khi chạy migration, giả sử bạn cần tạo một tài khoản webmaster và phân các quyền cho nó mà không cần phải nhập tay rườm rà rồi đăng nhập admin để set phân quyền thì đây có vẻ là một lựa chọn không tồi.

Ngoài ra bạn có thể đọc thêm ở tài liệu hướng dẫn của Laravel để hiểu thêm về cách thức sử dụng: https://laravel.com/docs/8.x/seeding

Đến đây thì một mớ mẹo nữa đã kết thúc, rất cảm ơn bạn đã chịu khó đọc đến đây, nếu có chỗ nào khó hiểu, bạn có thể để lại bình luận, mình sẽ trả lời lại cho các bạn trong sự hiểu biết của mình nhé. Hẹn gặp lại bạn trong mẹo tiếp theo.

Chuyên đề: Mẹo Lập trình Laravel
Bài trước
Lưu ý: Hệ thống bài học theo Chuyên Đề đang được thử nghiệm.
Mẹo Laravel - Một số mẹo nhỏ trong Laravel Authentication

Danh sách bài học

Cùng chuyên mục

Xem nhiều hôm nay