Laravel 6 có gì mới? (Phần 2)

Upgrading to 6.0

Laravel documentation ước tính sẽ mất khoảng một giờ để nâng cấp từ 5,8 lên 6,0. Dự án của bạn có thể có các dêpndencies và các external package có thể tăng thêm thời gian đó, vì vậy hãy ghi nhớ điều đó khi bạn quyết định upgrade.

How to upgrade to Laravel 6.0

Trong file composer.json, thay đổi Laravel framework dependency từ 5.8.* thành ^6.0. Nếu bạn đang dùng phiên bản trước 5,8, bạn nên upgrade up to 5.8 trước khi chuyển sang 6.0.

// In composer.json
"laravel/framework": "^6.0",

Sau đó bạn chạy terminal command:

composer update

Laravel Shift

Một cách tuyệt vời khác để quản lý các bản upgrades của bạn, đặc biệt đối với các ứng dụng lớn hơn, là sử dụng Laravel Shift. Shift là một tool tự động sẽ upgrade cho bạn.

It works like this:

  • Cấp cho Shift quyền truy cập Laravel repository của bạn
  • Chọn phiên bản Laravel mà bạn muốn upgrade
  • Shift tạo một branch mới và sửa đổi những gì cần thay đổi trong code của bạn
  • Shift tạo một pull request để bạn có thể kiểm tra và quyết định xem có nên merge không

Quá trình này rất đơn giản và là một lựa chọn tuyệt vời nếu chỉ đơn giản là thay đổi package version trong composer.json không phù hợp với bạn. Dịch vụ này không miễn phí, nhưng phí một lần rất thấp.


Bạn có thể tìm cấu trúc upgrade cho 6.0 tại đây


Do I need to Upgrade?

Laravel 6.0 là phiên bản Long Term Support release muộn nhất, có nghĩa là bug fix sẽ được đảm bảo trong hai năm và security fix trong ba năm. Bản phát hành LTS trước đó với những đảm bảo này là Laravel 5.5.

Bảng này từ website của Laravel phác thảo lịch trình hỗ trợ hiện tại:

Với các bản sửa lỗi cho bản phát hành LTS trước đó sẽ kết thúc sớm, có thể đáng để nâng cấp lên 6.0 để bạn biết rằng dự án của bạn sẽ được hỗ trợ thêm vài năm nữa.

Aside: Securing Laravel APIs with Auth0

Việc bảo mật Laravel API bằng Auth0 rất dễ dàng và mang lại rất nhiều tính năng tuyệt. Với Auth0, chúng ta chỉ phải viết một vài dòng code để nhận:

Sign Up for Auth0

Bạn sẽ cần một tài khoản Auth0 để quản lý authentication. Bạn có thể đăng ký một tài khoản miễn phí tại đây. Tiếp theo, cài đặt một Auth0 API.

Set Up an API

Chuyển đến APIs trong Auth0 dashboard của bạn và nhấp vào nút "Create API". Nhập tên cho API. Đặt Identifier thành một URL (URL tồn tại hoặc không tồn tại). Signing Algorithm phải là RS256.

https://images.viblo.asia/d5e06fe6-6c64-4b26-9817-b7cd11b927e6.png

Create API on Auth0 dashboard

Bây giờ chúng ta đã sẵn sàng để implement Auth0 authentication trên Laravel backend API của chúng ta.

Dependencies and Setup

Cài đặt package laravel-auth0 qua composer như sau:

composer require auth0/login:"~5.0"

Tạo configl file cho package laravel-auth0 như sau:

php artisan vendor:publish

Sau khi file được tạo, nó sẽ được đặt tại config/laravel-auth0.php. Chắc chắn rằng bạn thay thế các giá trị placeholder bằng các giá trị xác thực từ Auth0 Admin Dashboard. Kiểm tra kỹ giá trị của bạn với laravel-auth0.

File .env của bạn nên có các giá trị AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_CLIENT_SECRETAUTH0_CALLBACK_URL như sau:

AUTH0_DOMAIN=kabiyesi.auth0.com
AUTH0_CLIENT_ID=xxxxxxxxxxxxxxxxxx
AUTH0_CLIENT_SECRET=xxxxxxxxxxxxxxxxx
AUTH0_AUDIENCE=http://mylaravelapi.com
AUTH0_CALLBACK_URL=null

Activate Provider and Facade

Package laravel-auth0 đi kèm với một provider có tên là LoginServiceProvider. Thêm phần này vào danh sách các nhà providers của ứng dụng.

// config/app.php
'providers' => array(
    // ...
    \Auth0\Login\LoginServiceProvider::class,
);

Nếu bạn muốn sử dụng Auth0 Facade, thêm nó vào danh sách aliases.

// config/app.php
'aliases' => array(
    // ...
    'Auth0' => \Auth0\Login\Facade\Auth0::class,
);

Thông tin người dùng có thể được truy cập bằng gọi Auth0::getUser(). Cuối cùng, bạn cần liên kết một class cung cấp người dùng (người dùng mô hình ứng dụng của bạn) mỗi khi người dùng đăng nhập hoặc access_token được decode. Bạn có thể sử dụng Auth0UserRepository được cung cấp bởi package này hoặc bạn có thể xây dựng class của riêng mình.

Để sử dụng Auth0UserRepository, thêm các dòng sau vào AppServiceProvidder của bạn:

// app/Providers/AppServiceProvider.php
public function register()
{
    $this->app->bind(
      \Auth0\Login\Contract\Auth0UserRepository::class, 
      \Auth0\Login\Repository\Auth0UserRepository::class
    );
}

Configure Authentication Driver

Package laravel-auth0 đi kèm với một authentication driver được gọi là auth0. Driver này xác định cấu trúc user bao bọc user profile được chuẩn hóa được xác định bởi Auth0. Nó không thực sự tồn tại object mà chỉ đơn giản là lưu trữ nó trong session cho các lần gọi trong tương lai.

Điều này là đủ cho basic testing hoặc nếu bạn không có yêu cầu để duy trì user. Tại bất kỳ nơi nào, bạn có thể gọi Auth::check () để xác định xem có user nào đã đăng nhập và Auth::user() để truy xuất thông tin user.

Config driver trong config/auth.php để sử dụng auth0.

// app/config/auth.php
// ...
'providers' => [
    'users' => [
        'driver' => 'auth0'
    ],
],

Secure API Routes

API routes của bạn được định nghĩa trong routes/api.php cho các ứng dụng Laravel 5.3+.

// routes/api.php

<?php

use Illuminate\Http\Request;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::get('/public', function (Request $request) {
  return response()->json(["message" => "Hello from a public endpoint! You don't need any token to access this URL..Yaaaay!"]);
});

Route::get('/wakanda', function (Request $request) {
  return response()->json(["message" => "Access token is valid. Welcome to this private endpoint. You need elevated scopes to access Vibranium."]);
})->middleware('auth:api');

Bây giờ, bạn có thể gửi request đến enpoint được bảo vệ của bạn trong đó bao gồm access_token.

curl --request GET \
  --url http://localhost:8000/api/wakanda \
  --header 'authorization: Bearer <ACCESS TOKEN>'

Mỗi khi người dùng chạm vào api/wakanda endpoint, một JWT access_token hợp lệ sẽ được yêu cầu trước khi resource được release. Với điều này, các private routes sẽ được bảo vệ.

More Resources

Đó là nó! Chúng ta có một authenticated Laravel API với các routes bảo vệ. Để tìm hiểu thêm, hãy xem các resource sau:

Recap

Laravel đã mang lại rất nhiều sự hứng thú cho thế giới PHP và thật tuyệt khi thấy Framework và các sản phẩm đi kèm tiếp tục được cải thiện.

Với việc giới thiệu phiên bản semantic, bạn có thể upgrade giữa các phiên bản chính mà không phải lo lắng về những thay đổi lớn. Sự thay đổi này nhiều hơn là chỉ phiên bản, nó cho thấy rằng sau tất cả các cải tiến xuất hiện trong 5.x, framework hiện đang ở một điểm ổn định trong tương lai!

Ngoài phiên bản semantic, 6.0 còn mang đến những cải tiến về tốc độ khi truy cập các collection, bổ sung cho các lựa chọn subquery Eloquent, giới thiệu job middleware, ...

Tài liệu đầy đủ hiện đã có, vì vậy hãy xem nếu bạn muốn biết thêm thông tin về bản phát hành mới!

Và nếu bạn quan tâm đến việc thêm authentication vào ứng dụng Laravel 6.0 của mình, Auth0 cung cấp một SDK cực kỳ đơn giản có thể được tích hợp trong vài phút.

Tài liệu: https://auth0.com/blog/whats-new-in-laravel-6/