# Laravel9 實作Jetstream 與 API Token
[](https://hackmd.io/6UkNQjOtSGGWy4HDcXK4zg)
###### tags: `Laravel` `PHP`
## 安裝
### 安裝Jetstream
[套件官網](https://jetstream.laravel.com/2.x/installation.html)
```
composer require laravel/jetstream
```
### 使用 Livewire 安裝 Jetstream
```
php artisan jetstream:install livewire
php artisan jetstream:install livewire --teams
```
### 完成安裝
```
npm install
npm run build
php artisan migrate
```
### Livewire
```
php artisan vendor:publish --tag=jetstream-views
```
## Jetstream測試
安裝完成後輸入http://127.0.0.1 右上角會出現登入與註冊功能
### 首頁

### 登入頁

### 註冊頁

### 註冊完並登入後就會看到dashboard

## 開啟API Token
### 修改config/jetstream.php
```
'features' => [
// Features::termsAndPrivacyPolicy(),
Features::profilePhotos(),
Features::api(),
Features::accountDeletion(),
],
```
### 定義權限
如果要修改預設權限則App\Providers\JetstreamServiceProvider類中的方法定義
```
Jetstream::defaultApiTokenPermissions(['read']);
Jetstream::permissions([
'post:create',
'post:read',
'post:update',
'post:delete',
]);
```
### 驗證權限
routes\web.php或routes\api.php中經過身份驗證的路由的請求,都將與一個 Sanctum 令牌對象相關聯。tokenCan您可以使用特徵提供的方法來確定關聯的令牌是否具有給定的權限Laravel\Sanctum\HasApiTokens。
通常可以在Controller 或 Middleware 去驗證api token。
```
use Laravel\Sanctum\Contracts\HasApiTokens;
public function index(Request $request)
{
// 判斷是否是允許的api token
if($request->user()->tokenCan('read')){
return 'sucess';
}
return 'false';
}
```
## Jetstream Api Token 測試
### 修改 route\api.php
```
Route::group(['middleware' => ['auth:sanctum']], function() {
Route::get('apitest', [TestController::class, 'index']);
});
```
### 創建TestController
```
php artisan make:controller TestController --api
```
### 修改TestController
```
<?php
namespace App\Http\Controllers;
use App\Models\Test;
use Illuminate\Http\Request;
use Laravel\Sanctum\Contracts\HasApiTokens;
class TestController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
// 判斷是否是允許的api token
if($request->user()->tokenCan('read')){
return 'sucess';
}
return 'false';
}
...
}
```
### 申請API token
API token 功能開啟後,則會出現API token功能頁


創建名為test的API token

### Running with postman
沒有帶入API token,被轉導回登入頁

帶入後則會收到sucess的訊息
