Bài 11: Session và Middleware trong laravel 5.x

Admin
02-07-2017

Session luôn là 1 phần không thể thiếu khi xây dựng website, nó giúp ta kiểm soát phiên làm việc của khách hàng trên website của bạn. Middleware giúp bạn lọc các HTTP request mà người dùng gửi tới, ví dụ bạn muốn truy cập vào trang quản trị trước hết bạn phải đăng nhập. nếu ko middleware sẽ chặn và chuyển bạn về trang đăng nhập

1. Sesion trong laravel

File cấu hình session của Laravel 5.x nằm trong thư mục config/session.php. Tại file này bạn có thể cấu hình lưu session dạng file hay tại bảng, tên bảng session, thư mục chứa file ... Mặc định laravel sẽ lưu trữ session của bạn bằng file trong thư mục 'storage/framework/sessions'

Cách sử dụng session.

Bây giờ ta tạo 1 url để test tại file route

Route::get('demo-session', 'DemoController@testSession' );

Lưu trữ 1 biến trong session và lấy giá trị của biến đó ra trong Controller

public function testSession(){
	Session::put('user', 'Thông tin user');
	// Tạo session tên user với giá trị là Thông tin user
	$ss = Session::get('user');	
	// Lấy giá trị của session ra	
	var_dump($ss);
}

Tạo session với key là 1 mảng:

public function testSession(){
	Session::put('user.id', '1');
	Session::put('user.name', 'Công nghệ 5s');
	// Tạo session 
	$ss = Session::get('user');	
	// Lấy giá trị của session 
	var_dump($ss);
}

Kiểm tra 1 session có tồn tại hay không trong Laravel

if(Session::has('user')){
	$ss = Session::get('user');	
}

Xóa 1 session khỏi Laravel

Session::forget('user');

2. Middleware trong Laravel

Thư mục chứa Middleware: app/Http/Middleware

Laravel 5 mặc định tạo sẵn cho bạn 1 số middleware như Authentication, CSRF token ...

Tạo 1 middleware trong Laravel

Bạn có thể tạo thủ công bằng cách tạo 1 file trong thư mục chứa là app/Http/Middleware hoặc tiện lợi hơn là tạo bằng artisan

Mở command line tại thư mục gốc và gõ

php artisan make:middleware CheckLevelMiddleware
//CheckLevelMiddleware là tên của middleware

Tạo middleware trong laravel 5

Bây giờ mình code vào Middleware mà mình mới tạo, nằm trong app/Http/Middleware/ và thêm vào:

namespace App\Http\Middleware;

use Closure;
use Auth;

class CheckLevelMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Auth::check()&&Auth::user()->level==1){
            // Nếu đã chứng thực và level ==1 (là admin)
            return $next($request);
        }else{
            return redirect('/');
            // Nếu không phải chuyển hướng về trang chủ
        }
    }
}

Đăng ký middleware mới tạo với Laravel trong app/Http/Kernel.php

Nếu muốn mọi Http Request đều duyệt qua thì bạn tìm đến đoạn protected $middleware và khai báo tại đây

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,

        \App\Http\Middleware\CheckLevelMiddleware::class,
    ];

Nếu bạn chỉ muốn duyệt tại 1 Route nào đó thôi bạn khai báo tại protected $routeMiddleware 

Nếu muốn tạo middleware cho 1 nhóm các Route bạn khai báo tại protected $middlewareGroups 

Sau khi đã đăng ký middleware trong Kernel bạn có thể sử dụng tạo route

Route::get('admin', function () {
    //
})->middleware('ChecklevelMiddleware');

Nếu muốn duyệt qua nhiều middleware

Route::get('admin', function () {
    //
})->middleware('Middleware1','Middleware2');

Tạo middle cho 1 nhóm các Route

Route::group(['middleware' => ['web']], function () {
    //
});

Qua bài này chắc các bạn đã có thể nắm session và middleware trong Laravel 5, nếu muốn xem thêm cách bài khác về Laravel 5 bạn có thể truy cập những bài hướng dẫn về Laravel khác trong trang của mình. Chúc các bạn thành công!