Bài 12. Auth trong Laravel 5

Bài trước mình đã giới thiệu về Eloquent trong Laravel 5 và ứng dụng Eloquent làm trang quản trị website tin tức. Bài hôm nay chúng ta sẽ đi tìm hiểu về Auth trong Laravel 5 và ứng dụng nó để viết trang login.

Mục Lục:

1. Authentication là gì?

Xác thực để nhận dạng (identity) người dùng. Trong suốt quá trình thực hiện Username và password luôn được kiểm tra trong hệ thống đảm bảo người dùng đó luôn được thực hiện đúng với quyền của mình.

Xác định và xác nhận là cách dễ dàng để phân biệt mỗi người với nhau. Đối với con người chúng ta có thể phân biệt bạn bè của mình thông qua khuôn mặt hay giọng nói của họ. Đối với máy tính khó thì rất khó khăn để nó có thể xác định được ai đang ngồi trước nó, hoặc truy cập từ xa nếu không có cơ chế xác nhận và xác thực rõ ràng.

Xác thực bằng Password:

Đây có lẽ là hình thức được sử dụng lâu đời nhất và phổ biến nhất trong các hệ thống máy tính.

Người dùng nhập vào tên tài khoản và password tường ứng, có thể được thử nhiều lần trong trường hợp có lỗi xảy ra.

Trích dẫn: Nguy cơ về an ninh thông tin từ hệ điều hành - tuhocanninhmang.com

2. Authentication trong Laravel

Authentication trong Laravel được định nghĩa trong file config/auth.php

        return [

            /*
            |--------------------------------------------------------------------------
            | Authentication Defaults
            |--------------------------------------------------------------------------
            |
            | This option controls the default authentication "guard" and password
            | reset options for your application. You may change these defaults
            | as required, but they're a perfect start for most applications.
            |
            */

            'defaults' => [
                'guard' => 'web',
                'passwords' => 'users',
            ],

            /*
            |--------------------------------------------------------------------------
            | Authentication Guards
            |--------------------------------------------------------------------------
            |
            | Next, you may define every authentication guard for your application.
            | Of course, a great default configuration has been defined for you
            | here which uses session storage and the Eloquent user provider.
            |
            | All authentication drivers have a user provider. This defines how the
            | users are actually retrieved out of your database or other storage
            | mechanisms used by this application to persist your user's data.
            |
            | Supported: "session", "token"
            |
            */

            'guards' => [
                'web' => [
                    'driver' => 'session',
                    'provider' => 'users',
                ],

                'api' => [
                    'driver' => 'token',
                    'provider' => 'users',
                ],
            ],

            /*
            |--------------------------------------------------------------------------
            | User Providers
            |--------------------------------------------------------------------------
            |
            | All authentication drivers have a user provider. This defines how the
            | users are actually retrieved out of your database or other storage
            | mechanisms used by this application to persist your user's data.
            |
            | If you have multiple user tables or models you may configure multiple
            | sources which represent each model / table. These sources may then
            | be assigned to any extra authentication guards you have defined.
            |
            | Supported: "database", "eloquent"
            |
            */

            'providers' => [
                'users' => [
                    'driver' => 'eloquent',
                    'model' => App\User::class,
                ],

                // 'users' => [
                //     'driver' => 'database',
                //     'table' => 'users',
                // ],
            ],

            /*
            |--------------------------------------------------------------------------
            | Resetting Passwords
            |--------------------------------------------------------------------------
            |
            | You may specify multiple password reset configurations if you have more
            | than one user table or model in the application and you want to have
            | separate password reset settings based on the specific user types.
            |
            | The expire time is the number of minutes that the reset token should be
            | considered valid. This security feature keeps tokens short-lived so
            | they have less time to be guessed. You may change this as needed.
            |
            */

            'passwords' => [
                'users' => [
                    'provider' => 'users',
                    'table' => 'password_resets',
                    'expire' => 60,
                ],
            ],

        ];
    

Mình đang viết bài này trên phiên bản 5.4 nên sẽ có sự khác biệt so với các phiên bản khác

Ở đây bạn chủ yếu quan tâm thèn providers

        'providers' => [
            'users' => [
                'driver' => 'eloquent',
                'model' => App\User::class,
            ],
    
  • Driver: Đây là thiết lập xác định phương thức lấy thông tin người dùng để xác thực, và như các bạn thấy thì mặc định nó sẽ sử dụng eloquent, tuy nhiên còn một sự lựa chọn khác là database và thậm trí bạn cũng có thể tạo thêm một driver của riêng bạn( sẽ nói ở phần nâng cao). Đối với series cơ bản này thì mình khuyên các bạn nên dữ nguyên.
  • Model: Đây là thiết lập nguồn dữ liệu lấy ra từ đâu. Ở đây mặc định Laravel chọn là moder User (local: App\User.php). Thông số này bạn có thể chỉnh thành name model của bạn.

3. Tạo Auth Trong Laravel

Cú pháp tạo Auth trong Laravel

        $ php artisan make:auth
    

Sau khi chạy lệnh này lên thì Laravel sẽ thêm cho chúng ta một HomeController, một sub-view auth

Laravel tạo cho ta chức năng login: http://localhost/blog/public/login

Laravel tạo cho ta chức năng register: http://localhost/blog/public/register

4. Tạo Trang Login cho Dự án website tin tức

Ở đây mình sẽ làm thủ công không sử dụng artisan như trên

tạo view login: resources/views/admin/login.blade.php

        
    

Tạo route và controller

        Route::get('administrator/login', ['as' => 'getLogin', 'uses' => 'Admin\CheckUserController@getLogin']);
        Route::get('administrator/logout', ['as' => 'getLogout', 'uses' => 'Admin\CheckUserController@getLogout']);
        Route::post('administrator/login', ['as' => 'postLogin', 'uses' => 'Admin\CheckUserController@postLogin']);
    
        $ php artisan make:controller Admin\CheckUserController
    
        use Illuminate\Http\Request;
        use Auth;
        use App\Http\Controllers\Controller;

        class CheckUserController extends Controller
        {
            public function getLogin() {
                return view('admin.login');
            }

            public function postLogin(Request $request) {
                if(Auth::attempt(['username' => $request->txtUsername, 'password' => $request->txtPassword])) {
                    return redirect('administrator/index');
                }else {
                    return view('admin.login');
                }
            }

            public function logout() {
                Auth::logout();
                return view('admin.login');
            }
        }
    

Test nào: http://localhost/tintuc/public/administrator/login

Nhập thông tin user mình tạo ở bài trước vào test tiếp nào

Ô Hên thế ah!!!

Trong bài này mình đã giới thiệu về Auth trong Laravel 5 và tạo trang login cho dự án website tin tức. Trong series bài viết tiếp theo mình sẽ hướng dẫn các bạn về Middleware trong Laravel 5 và ứng dụng nó trong dự án website tin tức. Bài viết trên là những hiểu biết của cá nhân mình nên không tránh phải sai sót, rất mong sự đóng góp ý kiến của các bạn để bài viết trở nên hữu ích hơn.