học laravel 5

Bài 12 : Authentication trong Laravel 5

A. Giới thiệu về Authentication trong Laravel 5

Authentication là gì? Authentication có tác dụng gì? Laravel hỗ trợ Authentication thế nào? Mình sẽ giới thiệu cho các bạn về Authentication của Laravel trong bài viết này.

1. Authentication là gì?

Authentication hay còn được gọi là xác thực là hành động nhằm thiếp lập hoặc chứng thực một cái gì đó đáng tin cậy. Khái niệm Authentication hay bị nhầm lẫn với Authorization (sự ủy quyền) tuy nhiên việc phân biệt 2 khái niệm này đơn giản ta có thể hiểu là Authentication là quá trình xác minh nhận dạng của người dùng còn Authorization là cho người dùng quyền để thực thi thao tác trên hệ thống.

Việc xác thực sẽ đảm bảo được thông tin được gửi tới đúng người cần gửi và đảm bảo người dùng đang thi hành các chức năng trên hệ thống là người được ủy quyền làm việc đó.

2. Sự hỗ trợ của Laravel với Authentication

Laravel giúp việc triển khai Authentication trở nên rất đơn giản, hầu hết tất cả mọi thứ đã được cấu hình trước trong file config/auth.php. Thông thường thì bạn cứ để mọi thứ như mặc định và sử dụng tuy nhiên chúng ta sẽ xem các thiết lập để bạn có thể hiểu rõ ràng hơn về chúng:

authecation trong laravel - auth

  • driver : Thiết lập này xác định cách thông tin người dùng được lấy ra và xác thực. Mặc định nó sẽ sử dụng model eloquenttuy nhiên còn một sự lựa chọn khác là databasesẽ khiến Laravel làm việc trực tiếp với cơ sở dữ liệu thay vì làm việc với model. Trừ khi bạn biết chính xác bạn đang làm gì còn không mình khuyên các bạn nên để theo mặc định là eloquent. (Để hiểu rõ hơn về eloquent model bạn có thể xem ở trong bài viết này: https://kungfuphp.com/laravel-framework-5/su-dung-eloquent-trong-laravel-5.html)
  • model : Thiết lập này cho Laravel biết model nào được sử dụng để lưu trữ thông tin người dùng theo mặc định thì nó được đặt cho app\User. (Mình sẽ giải thích rõ về model User trong bài viết sau)
  • table : Thiết lập này xác định bảng nào trong cơ sở dữ liệu được sử dụng để lưu trữ thông tin người dùng. Theo mặc định nó sẽ được đặt cho bảng users.
  • password : Laravel sử dụng một số cơ chế cần thiết để quản lý và xử lý các yêu cầu khôi phục mật khẩu. Thiết lập này xác định view chứa nội dung email được gửi tới người dùng, bảng trong cơ sở dữ liệu được dùng để quản lý yêu cầu khôi phục mật khẩu và thời hạn (tính theo phút) mà yêu cầu khôi phục có hiệu lực.

Gợi ý xem : Khóa học tạo website hoàn chỉnh với Laravel 5+ tặng mã giảm giá 40% + Hỗ trợ việc làm sau khi học xong

Tiếp đến, mình sẽ hướng dẫn các bạn cách sử dụng các Controller sẵn có của Laravel để thực hiện việc xác thực người dùng.

B. Authentication trong Laravel 5 sử dụng Controller có sẵn (Phần 1)

Phần trên mình đã giới thiệu cho các bạn về Authentication trong Laravel 5. Trong bài viết này mình sẽ hướng dẫn các bạn sử dụng Controller được Laravel cung cấp sẵn để đăng kí người dùng mới với hệ thống.

I. Giới thiệu về Model User và Table users

1. Model User

Laravel đã xây dựng sẵn cho bạn một model User (người dùng) dễ dễ dàng quản lý tài khoản của người dùng được đặt tại app\User.php

authencation trong laravel 5 - app user
Contract (có thể hiểu là giao kèo) là một interface (Interface là một class chứa các hằng và các biến được khai báo trước nhưng không được định nghĩa và chứa các hành vi chuẩn)  cho việc implement một tập hợp các phương thức cụ thể.

Ví dụ, AuthenticatableContract định nghĩa một interface để lấy được các thông tin định danh của người dùng cùng với mật khẩu và quản lý token “Remember me” (Ghi nhớ tài khoản) có được sử dụng không. Các bạn có thể thấy là model User trông có vẻ khác đối với các model trong các bài viết trước, để ý sẽ thấy việc implement 3 contract vào đó là: AuthenticatableContract,AuthorizableContractCanResetPasswordContract.

Bạn đã biết về thuộc tính $table trong các bài viết trước, nó xác định tên bảng của model được sử dụng. Thuộc tính $fillable xác định các cột có thể được insert/update bằng cách gán đồng thời (mass assignment). Cuối cùng, thuộc tính $hidden được sử dụng để xác định cột không được truyền vào JSON hoặc các mảng dữ liệu để tránh lộ mật khẩu.

2. Table users

Ngoài việc tạo ra model User sẵn, Laravel còn tạo ra trước migration cho bảng users (người dùng) mà bạn có thể thấy trong database/migrations/2014_10_12_000000_create_users_table.php. Trong các bài viết trước nếu bạn đã chạy artisan:migrate thì bảng users đã được tạo ra trong CSDL của bạn. Bảng có cấu trúc như sau:

authencation trong laravel 5 - bảng user

Gợi ý : Bạn là người mới và muốn tìm hiểu về Bitcoin nhưng không biết bắt đầu từ đâu? Click xem ngay Hướng Dẫn Đầu Tư Bitcoin Cho Người Mới nhé!

II. Đăng kí người dùng mới

1. Thiếp lập Route

Ở trong Laravel 5.0 thì một số khai báo route cho việc đăng kí người dùng đã được bao gồm trong app/Http/routes.php, tuy nhiên nó đã bị loại bỏ ở phiên bản 5.1. Tuy nhiên bạn có thể dễ dàng thêm chúng lại bằng cách thêm các dòng lệnh sau vào app/Http/routes.php:

4

2. Xây dựng view đăng kí người dùng

Mặc dù các controller cho Authentication đã có sẵn trong framework tuy nhiên bạn cần phải xây dựng view để sử dụng chúng. Bạn tạo một file có tên register.blade.php và đặt nó trong thư mục auth tại resources/view như sau:

5

Bạn có thể tùy chỉnh view register.blade.php theo ý bạn. Ở đây mình sẽ tạo ra một form đăng kí người dùng như sau:

6

Trong đoạn code trên sử dụng if để xem có lỗi gì xảy ra trong quá trình đăng kí không và in chúng ra.

7

Sau khi tạo view xong thì các bạn có thể truy cập vào view đăng kí người dùng mới bằng đường dẫn /auth/register:

8

Các bạn hãy thử đăng kí người dùng mới và sẽ thấy bản ghi mới được ghi vào trong bảng users.

9

10

Hơn thế nữa, Laravel sẽ tự động đăng nhập vào tài khoản mới tạo và chuyển bạn đến trang  /home. Nếu đường dẫn này không tồn tại thì bạn sẽ nhận được một thông báo lỗi 404. Bạn có thể thiết lập một route mới hoặc có thể chọn đường dẫn khác bằng cách ghi đè lên thuộc tính $redirectTo trong file AuthController.php:

11

Như vậy trong phần này mình đã giới thiệu cho các bạn về Model Users và cách sử dụng Authentication trong Laravel để đăng ký người dùng mới. Trong bài viết sau mình sẽ hướng dẫn các bạn tạo form đăng nhập và sử dụng AuthController của Laravel để đăng nhập và đăng xuất hệ thống.

C. Authentication trong Laravel 5 sử dụng Controller có sẵn (Phần 2)

Trong phần B mình đã giới thiệu cho các bạn về model User, table users  hướng dẫn các bạn tạo view đăng ký người dùng sử dụng AuthController có sẵn của Laravel để đăng ký người dùng mới. Trong bài viết này mình sẽ hướng dẫn các bạn sử dụng AuthController để đăng nhập và đăng xuất hệ thống.

I. Đăng nhập vào hệ thống

1. Thiết lập Route

Các bạn kiểm tra file app/Http/routes.php và đảm bảo rằng đã khai báo sử dụng AuthController như sau:

12
2. Xây dựng view đăng nhập hệ thống

Bạn tạo một file có tên login.blade.php và đặt bên trong thư mục resources/view/auth như sau:

13

Cũng giống như file register.blade.php bạn có thể tùy chỉnh file login.blade.php theo ý của mình. Ở đây mình tạo ra một form đăng nhập hệ thống trong file login.blade.php như sau:

14

Trong đoạn trên ta sử dụng câu lệnh if để kiểm tra xem có lỗi nào không và in chúng ra bằng câu lệnh foreach.

15

Sau khi tạo view xong các bạn có thể truy cập vào view login.blade.php thông qua đường dẫn /auth/login:

16
Sau khi đăng nhập vào hệ thống theo mặc định thì Laravel sẽ chuyển bạn đến đường dẫn
/hometuy nhiên đường dẫn này chưa có nên bạn sẽ gặp lỗi 404.

Bạn có thể tạo một route mới trong app/Http/routes.php hoặc override lên đường dẫn đó để chuyển qua đường dẫn khác bằng cách thêm vào thuộc tính $redirectPath trong file app/Http/Auth/AuthController.phpCác bạn hãy nhập thông tin bằng tài khoản người dùng đã tạo ở trong bài viết trước và đăng nhập vào hệ thống.

17
Có 1 điểm lưu ý là nếu các bạn tích vào ô “Ghi nhớ” thì Laravel sẽ update vào trường remember_token ở bảng users để ghi nhớ thông tin về tài khoản của bạn:

18

3. Sử dụng Authentication Throttling

Laravel 5.1 đưa ra một tính năng mới được gọi là Authentication Throttling (hạn chế xác thực) để nhằm ngăn chặn việc thực thi xác thực trong vòng 1 phút nếu người dùng xác thực 5 lần liên tiếp không thành công. Để sử dụng chức năng này thì bạn có thể mở class AuthController trong app/Http/Controllers/Auth/AuthController.php và thêm vào trait ThrottlesLogins như sau:

19
Còn nếu các bạn muốn bỏ việc hạn chế xác thực thì các bạn chỉ việc bỏ việc sử dụng
ThrottlesLogins trong file AuthController.Nếu bạn muốn xem hoặc chỉnh sửa số lần đăng nhập thất bại cho phép hay thời gian chờ thì các bạn có thể vào trong trait ThrottlesLogins tại: vendor/laravel/framework/src/Illuminate/Foundation/Auth/ThrottlesLogins.php.

II. Đăng xuất khỏi hệ thống

Laravel hỗ trợ người dùng có thể đăng xuất khỏi hệ thống (ngắt session đã được xác thực) một cách rất đơn giản: bạn chỉ việc truy cập vào đường dẫn /auth/logout. Sau khi truy cập vào đường dẫn trên thì Laravel sẽ đăng xuất tài khoản ra khỏi hệ thống và mặc định đưa bạn về đường dẫn /home còn nếu các bạn đã thay đổi thuộc tính $redirectPath ở trong AuthController trong các ví dụ trên thì Laravel sẽ đưa bạn về đường dẫn mà bạn đã ghi đè lên. Đây là màn hình sau của mình sau khi đăng xuất khỏi hệ thống và đã ghi đề lên thuộc tính $redirectPath để đưa về đường dẫn “/”:

20
Như vậy trong bài viết này mình đã hướng dẫn các bạn cách tạo view để đăng nhập vào hệ thống và làm sao để đăng xuất khỏi hệ thống. Trong bài viết sau mình sẽ hướng dẫn các bạn cách khôi phục mật khẩu và lấy thông tin người dùng đã được xác thực.
Trong bài viết sau mình sẽ giúp các bạn dễ dàng sử dụng chức năng này hơn bằng cách sử dụng button ở đường dẫn sau khi người dùng đăng nhập vào hệ thống.

Tác giả : Trần Nam

Nguồn : kungfuphp.com

Có ích

học laravel 5

Bài 20: Phân trang trong Laravel 5

Phân trang trong laravel 5 (Pagination) là một tính năng rất quan trọng với nhiều …

2 bình luận

  1. phần logout sao của mình không chạy nhỉ

    • nếu muốn logout ngọt ngào trên lar 5 thì phải xóa cả session cho nó nếu không thằng ThrottlesLogins sẽ bắt số lần đăng nhập trong thời gian nhất định , newbie dễ thấy nản khi không login lại dc :

      code logout chỉ có như sau :

      public function logout(){
      Auth::logout();
      Session::flush();
      return redirect(‘login’);
      }

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *