Laravel: Sanctum
- Giới thiệu
- Cài đặt
- Cấu hình
- Xác thực mã thông báo API
- Xác thực SPA
- Xác thực Ứng dụng Di động
- Thử nghiệm
Giới thiệu
Laravel Sanctum cung cấp một hệ thống xác thực nhẹ cho các SPA (ứng dụng trang đơn), ứng dụng di động và các API đơn giản dựa trên mã thông báo. Sanctum cho phép mỗi người dùng ứng dụng của bạn tạo nhiều mã thông báo API cho tài khoản của họ. Các mã thông báo này có thể được cấp các khả năng / phạm vi chỉ định các hành động mà mã thông báo được phép thực hiện.
Làm thế nào nó hoạt động
Laravel Sanctum tồn tại để giải quyết hai vấn đề riêng biệt. Hãy thảo luận về từng thứ trước khi tìm hiểu sâu hơn về thư viện.
Mã thông báo API
Đầu tiên, Sanctum là một gói đơn giản mà bạn có thể sử dụng để phát hành mã thông báo API cho người dùng của mình mà không có sự phức tạp của OAuth. Tính năng này được lấy cảm hứng từ GitHub và các ứng dụng khác phát hành "mã thông báo truy cập cá nhân". Ví dụ: hãy tưởng tượng "cài đặt tài khoản" của ứng dụng của bạn có một màn hình nơi người dùng có thể tạo mã thông báo API cho tài khoản của họ. Bạn có thể sử dụng Sanctum để tạo và quản lý các mã thông báo đó. Những mã thông báo này thường có thời gian hết hạn rất dài (năm), nhưng người dùng có thể thu hồi thủ công bất cứ lúc nào.
Laravel Sanctum cung cấp tính năng này bằng cách lưu trữ mã thông báo API của người dùng trong một bảng cơ sở dữ liệu duy nhất và xác thực các yêu cầu HTTP đến thông qua Authorization
tiêu đề phải chứa mã thông báo API hợp lệ.
Xác thực SPA
Thứ hai, Sanctum tồn tại để cung cấp một cách đơn giản để xác thực các ứng dụng trang đơn (SPA) cần giao tiếp với một API được hỗ trợ bởi Laravel. Các SPA này có thể tồn tại trong cùng một kho lưu trữ như ứng dụng Laravel của bạn hoặc có thể là một kho lưu trữ hoàn toàn riêng biệt, chẳng hạn như SPA được tạo bằng Vue CLI hoặc ứng dụng Next.js.
Đối với tính năng này, Sanctum không sử dụng bất kỳ loại token nào. Thay vào đó, Sanctum sử dụng các dịch vụ xác thực phiên dựa trên cookie được tích hợp sẵn của Laravel. Thông thường, Sanctum sử dụng trình web
bảo vệ xác thực của Laravel để thực hiện điều này. Điều này cung cấp các lợi ích của bảo vệ CSRF, xác thực phiên, cũng như bảo vệ chống rò rỉ thông tin xác thực qua XSS.
Sanctum sẽ chỉ cố gắng xác thực bằng cookie khi yêu cầu đến bắt nguồn từ giao diện người dùng SPA của riêng bạn. Khi Sanctum kiểm tra một yêu cầu HTTP đến, trước tiên nó sẽ kiểm tra cookie xác thực và nếu không có cookie nào thì Sanctum sẽ kiểm tra Authorization
tiêu đề để tìm mã thông báo API hợp lệ.
Hoàn toàn ổn nếu chỉ sử dụng Sanctum để xác thực mã thông báo API hoặc chỉ để xác thực SPA. Chỉ vì bạn sử dụng Sanctum không có nghĩa là bạn bắt buộc phải sử dụng cả hai tính năng mà nó cung cấp.
Cài đặt
Các phiên bản mới nhất của Laravel đã bao gồm Laravel Sanctum. Tuy nhiên, nếu
composer.json
tệp ứng dụng của bạn không bao gồmlaravel/sanctum
, bạn có thể làm theo hướng dẫn cài đặt bên dưới.
Bạn có thể cài đặt Laravel Sanctum thông qua trình quản lý gói Composer:
composer require laravel/sanctum
Tiếp theo, bạn nên xuất bản cấu hình Sanctum và các tệp di chuyển bằng vendor:publish
lệnh Artisan. Tệp sanctum
cấu hình sẽ được đặt trong thư mục ứng dụng của bạn config
:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Cuối cùng, bạn nên chạy quá trình di chuyển cơ sở dữ liệu của mình. Sanctum sẽ tạo một bảng cơ sở dữ liệu để lưu trữ các mã thông báo API:
php artisan migrate
Tiếp theo, nếu bạn định sử dụng Sanctum để xác thực một SPA, bạn nên thêm phần mềm trung gian của Sanctum vào api
nhóm phần mềm trung gian trong app/Http/Kernel.php
tệp ứng dụng của bạn :
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
Tùy chỉnh di chuyển
Nếu bạn không sử dụng di chuyển mặc định của Sanctum, bạn nên gọi Sanctum::ignoreMigrations
phương thức trong register
phương thức của App\Providers\AppServiceProvider
lớp của bạn . Bạn có thể xuất các di chuyển mặc định bằng cách thực hiện lệnh sau:php artisan vendor:publish --tag=sanctum-migrations
Cấu hình
Ghi đè các mô hình mặc định
Mặc dù thường không bắt buộc, bạn có thể tự do mở rộng PersonalAccessToken
mô hình được Sanctum sử dụng nội bộ:
use Laravel\Sanctum\PersonalAccessToken as SanctumPersonalAccessToken;
class PersonalAccessToken extends SanctumPersonalAccessToken
{
// ...
}
Sau đó, bạn có thể hướng dẫn Sanctum sử dụng mô hình tùy chỉnh của bạn thông qua usePersonalAccessTokenModel
phương pháp do Sanctum cung cấp. Thông thường, bạn nên gọi phương thức này theo boot
phương thức của một trong những nhà cung cấp dịch vụ ứng dụng của bạn:
use App\Models\Sanctum\PersonalAccessToken;
use Laravel\Sanctum\Sanctum;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
}
Xác thực mã thông báo API
Bạn không nên sử dụng mã thông báo API để xác thực SPA của bên thứ nhất của riêng bạn. Thay vào đó, hãy sử dụng các tính năng xác thực SPA có sẵn của Sanctum .
Phát hành mã thông báo API
Sanctum cho phép bạn phát hành mã thông báo API / mã thông báo truy cập cá nhân có thể được sử dụng để xác thực các yêu cầu API cho ứng dụng của bạn. Khi thực hiện yêu cầu bằng mã thông báo API, mã thông báo phải được bao gồm trong Authorization
tiêu đề dưới dạng Bearer
mã thông báo.
Để bắt đầu phát hành mã thông báo cho người dùng, mô hình Người dùng của bạn nên sử dụng Laravel\Sanctum\HasApiTokens
đặc điểm:
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}
Để phát hành mã thông báo, bạn có thể sử dụng createToken
phương pháp này. Các createToken
phương thức trả về một Laravel\Sanctum\NewAccessToken
ví dụ. Mã thông báo API được băm bằng cách sử dụng hàm băm SHA-256 trước khi được lưu trữ trong cơ sở dữ liệu của bạn, nhưng bạn có thể truy cập giá trị văn bản thuần túy của mã thông báo bằng cách sử dụng thuộc plainTextToken
tính của NewAccessToken
phiên bản. Bạn nên hiển thị giá trị này cho người dùng ngay sau khi mã thông báo được tạo:
use Illuminate\Http\Request;
Route::post('/tokens/create', function (Request $request) {
$token = $request->user()->createToken($request->token_name);
return ['token' => $token->plainTextToken];
});
Bạn có thể truy cập tất cả các mã thông báo của người dùng bằng cách sử dụng tokens
mối quan hệ Eloquent được cung cấp bởi HasApiTokens
đặc điểm:
foreach ($user->tokens as $token) {
//
}
Khả năng mã thông báo
Sanctum cho phép bạn gán mã thông báo "khả năng". Các khả năng phục vụ một mục đích tương tự như "phạm vi" của OAuth. Bạn có thể truyền một mảng khả năng chuỗi làm đối số thứ hai cho createToken
phương thức:
return $user->createToken('token-name', ['server:update'])->plainTextToken;
Khi xử lý một yêu cầu đến được Sanctum xác thực, bạn có thể xác định xem mã thông báo có khả năng nhất định hay không bằng cách sử dụng tokenCan
phương pháp:
if ($user->tokenCan('server:update')) {
//
}
Yêu cầu khởi tạo giao diện người dùng của bên thứ nhất
Để thuận tiện, tokenCan
phương thức sẽ luôn trả về true
nếu yêu cầu xác thực đến là từ SPA bên thứ nhất của bạn và bạn đang sử dụng xác thực SPA tích hợp sẵn của Sanctum .
Tuy nhiên, điều này không nhất thiết có nghĩa là ứng dụng của bạn phải cho phép người dùng thực hiện hành động. Thông thường, các chính sách ủy quyền của ứng dụng của bạn sẽ xác định xem mã thông báo đã được cấp quyền để thực hiện các khả năng hay chưa cũng như kiểm tra xem bản thân cá thể người dùng có được phép thực hiện hành động hay không.
Ví dụ: nếu chúng ta tưởng tượng một ứng dụng quản lý máy chủ, điều này có nghĩa là kiểm tra xem mã thông báo có được ủy quyền cập nhật máy chủ hay không và máy chủ đó thuộc về người dùng:
return $request->user()->id === $server->user_id &&
$request->user()->tokenCan('server:update')
Lúc đầu, việc cho phép tokenCan
phương thức được gọi và luôn trả về true
cho các yêu cầu khởi tạo giao diện người dùng của bên thứ nhất có vẻ lạ; tuy nhiên, thật tiện lợi khi có thể luôn cho rằng mã thông báo API có sẵn và có thể được kiểm tra thông qua tokenCan
phương pháp này. Bằng cách thực hiện phương pháp này, bạn luôn có thể gọi tokenCan
phương thức trong chính sách ủy quyền của ứng dụng mà không cần lo lắng về việc liệu yêu cầu có được kích hoạt từ giao diện người dùng của ứng dụng hay do một trong những người tiêu dùng bên thứ ba của API của bạn khởi xướng hay không.
Các tuyến đường bảo vệ
Để bảo vệ các tuyến sao cho tất cả các yêu cầu đến phải được xác thực, bạn nên gắn bộ sanctum
bảo vệ xác thực vào các tuyến được bảo vệ trong các tệp của bạn routes/web.php
và routes/api.php
định tuyến. Người bảo vệ này sẽ đảm bảo rằng các yêu cầu đến được xác thực dưới dạng yêu cầu trạng thái, được xác thực bằng cookie hoặc chứa tiêu đề mã thông báo API hợp lệ nếu yêu cầu đến từ bên thứ ba.
Bạn có thể tự hỏi tại sao chúng tôi khuyên bạn nên xác thực các tuyến đường trong routes/web.php
tệp ứng dụng của bạn bằng cách sử dụng trình sanctum
bảo vệ. Hãy nhớ rằng, trước tiên Sanctum sẽ cố gắng xác thực các yêu cầu đến bằng cookie xác thực phiên điển hình của Laravel. Nếu cookie đó không xuất hiện thì Sanctum sẽ cố gắng xác thực yêu cầu bằng cách sử dụng mã thông báo trong Authorization
tiêu đề của yêu cầu . Ngoài ra, việc xác thực tất cả các yêu cầu bằng cách sử dụng Sanctum đảm bảo rằng chúng tôi có thể luôn gọi tokenCan
phương thức trên phiên bản người dùng hiện đã được xác thực:
use Illuminate\Http\Request;
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
Thu hồi mã thông báo
Bạn có thể "thu hồi" mã thông báo bằng cách xóa chúng khỏi cơ sở dữ liệu của mình bằng cách sử dụng tokens
mối quan hệ được cung cấp bởi Laravel\Sanctum\HasApiTokens
đặc điểm:
// Revoke all tokens...
$user->tokens()->delete();
// Revoke the token that was used to authenticate the current request...
$request->user()->currentAccessToken()->delete();
// Revoke a specific token...
$user->tokens()->where('id', $tokenId)->delete();
Xác thực SPA
Sanctum cũng tồn tại để cung cấp một phương pháp đơn giản để xác thực các ứng dụng trang đơn (SPA) cần giao tiếp với một API được hỗ trợ bởi Laravel. Các SPA này có thể tồn tại trong cùng một kho lưu trữ như ứng dụng Laravel của bạn hoặc có thể là một kho lưu trữ hoàn toàn riêng biệt.
Đối với tính năng này, Sanctum không sử dụng bất kỳ loại token nào. Thay vào đó, Sanctum sử dụng các dịch vụ xác thực phiên dựa trên cookie được tích hợp sẵn của Laravel. Cách tiếp cận xác thực này cung cấp các lợi ích của bảo vệ CSRF, xác thực phiên, cũng như bảo vệ chống rò rỉ thông tin xác thực qua XSS.
Để xác thực, SPA và API của bạn phải chia sẻ cùng một miền cấp cao nhất. Tuy nhiên, chúng có thể được đặt trên các tên miền phụ khác nhau. Ngoài ra, bạn nên đảm bảo rằng bạn gửi
Accept: application/json
tiêu đề cùng với yêu cầu của mình.
Cấu hình
Định cấu hình miền của bên thứ nhất của bạn
Trước tiên, bạn nên định cấu hình các miền mà SPA của bạn sẽ thực hiện yêu cầu từ đó. Bạn có thể định cấu hình các miền này bằng cách sử dụng stateful
tùy chọn cấu hình trong sanctum
tệp cấu hình của mình . Cài đặt cấu hình này xác định miền nào sẽ duy trì xác thực "trạng thái" bằng cách sử dụng cookie phiên Laravel khi đưa ra yêu cầu đối với API của bạn.
Nếu bạn đang truy cập ứng dụng của mình qua URL có cổng (
127.0.0.1:8000
), bạn nên đảm bảo rằng bạn bao gồm số cổng với miền.
Phần mềm trung gian Sanctum
Tiếp theo, bạn nên thêm phần mềm trung gian của Sanctum vào api
nhóm phần mềm trung gian trong app/Http/Kernel.php
tệp của mình . Phần mềm trung gian này chịu trách nhiệm đảm bảo rằng các yêu cầu đến từ SPA của bạn có thể xác thực bằng cách sử dụng cookie phiên của Laravel, trong khi vẫn cho phép các yêu cầu từ bên thứ ba hoặc ứng dụng di động xác thực bằng cách sử dụng mã thông báo API:
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
CORS & Cookies
Nếu bạn gặp sự cố khi xác thực ứng dụng của mình từ một SPA thực thi trên một miền phụ riêng biệt, có thể bạn đã định cấu hình sai cài đặt CORS (Chia sẻ tài nguyên nhiều nguồn gốc) hoặc cài đặt cookie phiên của mình.
Bạn nên đảm bảo rằng cấu hình CORS của ứng dụng của bạn đang trả về Access-Control-Allow-Credentials
tiêu đề có giá trị là True
. Điều này có thể được thực hiện bằng cách đặt supports_credentials
tùy chọn trong config/cors.php
tệp cấu hình ứng dụng của bạn thành true
.
Ngoài ra, bạn nên bật withCredentials
tùy chọn trên phiên bản chung của ứng dụng axios
. Thông thường, điều này sẽ được thực hiện trong resources/js/bootstrap.js
tệp của bạn . Nếu bạn không sử dụng Axios để thực hiện các yêu cầu HTTP từ giao diện người dùng của mình, bạn nên thực hiện cấu hình tương đương trên ứng dụng khách HTTP của riêng mình:
axios.defaults.withCredentials = true;
Cuối cùng, bạn nên đảm bảo cấu hình miền cookie phiên của ứng dụng hỗ trợ bất kỳ miền phụ nào của miền gốc của bạn. Bạn có thể thực hiện điều này bằng cách thêm tiền tố tên miền vào đầu .
trong config/session.php
tệp cấu hình ứng dụng của bạn :
'domain' => '.domain.com',
Xác thực
Bảo vệ CSRF
Để xác thực SPA của bạn, trang "đăng nhập" của SPA trước tiên phải thực hiện yêu cầu tới /sanctum/csrf-cookie
điểm cuối để khởi tạo bảo vệ CSRF cho ứng dụng:
axios.get('/sanctum/csrf-cookie').then(response => {
// Login...
});
Trong yêu cầu này, Laravel sẽ đặt một XSRF-TOKEN
cookie chứa mã thông báo CSRF hiện tại. Mã thông báo này sau đó sẽ được chuyển vào X-XSRF-TOKEN
tiêu đề trong các yêu cầu tiếp theo, mà một số thư viện máy khách HTTP như Axios và Angular HttpClient sẽ tự động thực hiện cho bạn. Nếu thư viện JavaScript HTTP của bạn không đặt giá trị cho bạn, bạn sẽ cần phải đặt X-XSRF-TOKEN
tiêu đề theo cách thủ công để khớp với giá trị của XSRF-TOKEN
cookie được đặt theo tuyến này.
Đăng nhập
Sau khi bảo vệ CSRF đã được khởi tạo, bạn nên thực hiện POST
yêu cầu đối với tuyến ứng dụng Laravel của mình /login
. /login
Lộ trình này có thể được thực hiện theo cách thủ công hoặc sử dụng gói xác thực không đầu như Laravel Fortify .
Nếu yêu cầu đăng nhập thành công, bạn sẽ được xác thực và các yêu cầu tiếp theo đối với các tuyến ứng dụng của bạn sẽ tự động được xác thực thông qua cookie phiên mà ứng dụng Laravel đã cấp cho ứng dụng của bạn. Ngoài ra, vì ứng dụng của bạn đã đưa ra yêu cầu đối với /sanctum/csrf-cookie
tuyến đường, các yêu cầu tiếp theo sẽ tự động nhận được bảo vệ CSRF miễn là ứng dụng khách JavaScript HTTP của bạn gửi giá trị của XSRF-TOKEN
cookie trong X-XSRF-TOKEN
tiêu đề.
Tất nhiên, nếu phiên của người dùng của bạn hết hạn do thiếu hoạt động, các yêu cầu tiếp theo đối với ứng dụng Laravel có thể nhận được phản hồi lỗi HTTP 401 hoặc 419. Trong trường hợp này, bạn nên chuyển hướng người dùng đến trang đăng nhập SPA của bạn.
Bạn có thể tự do viết
/login
điểm cuối của riêng mình ; tuy nhiên, bạn nên đảm bảo rằng nó xác thực người dùng bằng các dịch vụ xác thực dựa trên phiên tiêu chuẩn mà Laravel cung cấp . Thông thường, điều này có nghĩa là sử dụng trìnhweb
bảo vệ xác thực.
Các tuyến đường bảo vệ
Để bảo vệ các tuyến sao cho tất cả các yêu cầu đến phải được xác thực, bạn nên gắn bộ sanctum
bảo vệ xác thực vào các tuyến API trong routes/api.php
tệp của bạn . Người bảo vệ này sẽ đảm bảo rằng các yêu cầu đến được xác thực dưới dạng yêu cầu được xác thực trạng thái từ SPA của bạn hoặc chứa tiêu đề mã thông báo API hợp lệ nếu yêu cầu đến từ bên thứ ba:
use Illuminate\Http\Request;
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
Cho phép các kênh phát sóng riêng tư
Nếu SPA của bạn cần xác thực với các kênh quảng bá riêng tư / hiện diện , bạn nên đặt lệnh Broadcast::routes
gọi phương thức trong routes/api.php
tệp của mình :
Broadcast::routes(['middleware' => ['auth:sanctum']]);
Tiếp theo, để các yêu cầu ủy quyền của Pusher thành công, bạn sẽ cần cung cấp một Pusher tùy chỉnh authorizer
khi khởi tạo Laravel Echo . Điều này cho phép ứng dụng của bạn định cấu hình Pusher để sử dụng axios
phiên bản được định cấu hình đúng cho các yêu cầu miền chéo :
window.Echo = new Echo({
broadcaster: "pusher",
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
encrypted: true,
key: process.env.MIX_PUSHER_APP_KEY,
authorizer: (channel, options) => {
return {
authorize: (socketId, callback) => {
axios.post('/api/broadcasting/auth', {
socket_id: socketId,
channel_name: channel.name
})
.then(response => {
callback(false, response.data);
})
.catch(error => {
callback(true, error);
});
}
};
},
})
Xác thực Ứng dụng Di động
Bạn cũng có thể sử dụng mã thông báo Sanctum để xác thực các yêu cầu của ứng dụng di động đối với API của bạn. Quy trình xác thực các yêu cầu ứng dụng di động tương tự như xác thực các yêu cầu API của bên thứ ba; tuy nhiên, có những khác biệt nhỏ về cách bạn sẽ phát hành mã thông báo API.
Phát hành mã thông báo API
Để bắt đầu, hãy tạo một tuyến chấp nhận email / tên người dùng, mật khẩu và tên thiết bị của người dùng, sau đó trao đổi các thông tin đăng nhập đó để lấy mã thông báo Sanctum mới. "Tên thiết bị" được cung cấp cho điểm cuối này là dành cho mục đích thông tin và có thể là bất kỳ giá trị nào bạn muốn. Nói chung, giá trị tên thiết bị phải là tên mà người dùng sẽ nhận ra, chẳng hạn như "Nuno's iPhone 12".
Thông thường, bạn sẽ yêu cầu điểm cuối mã thông báo từ màn hình "đăng nhập" ứng dụng di động của mình. Điểm cuối sẽ trả về mã thông báo API văn bản thuần túy sau đó có thể được lưu trữ trên thiết bị di động và được sử dụng để thực hiện các yêu cầu API bổ sung:
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
Route::post('/sanctum/token', function (Request $request) {
$request->validate([
'email' => 'required|email',
'password' => 'required',
'device_name' => 'required',
]);
$user = User::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],
]);
}
return $user->createToken($request->device_name)->plainTextToken;
});
Khi ứng dụng di động sử dụng mã thông báo để thực hiện yêu cầu API đối với ứng dụng của bạn, ứng dụng đó sẽ chuyển mã thông báo trong Authorization
tiêu đề dưới dạng Bearer
mã thông báo.
Khi phát hành mã thông báo cho một ứng dụng di động, bạn cũng có thể tự do chỉ định khả năng của mã thông báo .
Các tuyến đường bảo vệ
Như đã được ghi nhận trước đây, bạn có thể bảo vệ các tuyến để tất cả các yêu cầu đến phải được xác thực bằng cách gắn trình sanctum
bảo vệ xác thực vào các tuyến:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
Thu hồi mã thông báo
Để cho phép người dùng thu hồi mã thông báo API được cấp cho thiết bị di động, bạn có thể liệt kê chúng theo tên, cùng với nút "Thu hồi", trong phần "cài đặt tài khoản" của giao diện người dùng ứng dụng web của bạn. Khi người dùng nhấp vào nút "Thu hồi", bạn có thể xóa mã thông báo khỏi cơ sở dữ liệu. Hãy nhớ rằng, bạn có thể truy cập mã thông báo API của người dùng thông qua tokens
mối quan hệ được cung cấp bởi Laravel\Sanctum\HasApiTokens
đặc điểm:
// Revoke all tokens...
$user->tokens()->delete();
// Revoke a specific token...
$user->tokens()->where('id', $tokenId)->delete();
Thử nghiệm
Trong khi thử nghiệm, Sanctum::actingAs
phương pháp này có thể được sử dụng để xác thực người dùng và chỉ định khả năng nào sẽ được cấp cho mã thông báo của họ:
use App\Models\User;
use Laravel\Sanctum\Sanctum;
public function test_task_list_can_be_retrieved()
{
Sanctum::actingAs(
User::factory()->create(),
['view-tasks']
);
$response = $this->get('/api/task');
$response->assertOk();
}
Nếu bạn muốn cấp tất cả các khả năng cho mã thông báo, bạn nên đưa *
vào danh sách khả năng được cung cấp cho actingAs
phương thức:
Sanctum::actingAs(
User::factory()->create(),
['*']
);