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.
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.
Auth::login($userObject)
Auth::loginUsingId(1);
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.
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.
auth()
Auth
use
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 và @endguest để kiểm tra người dùng không đăng nhập (khách).
@guest
@endguest
Trong User model, chúng ta dùng MustVerifyEmail để thực hiện thao tính năng này.
MustVerifyEmail
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
app/Providers/EventServiceProvider.php
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
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 đó.
password.confirm
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.
database factories
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.