> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# 認證 - GitHub Copilot SDK for Laravel

> 了解 Laravel Copilot SDK 的認證方式，並選擇適用於本機開發、CI、伺服器執行與 BYOK 的方法。

## 認證

Copilot SDK 支援多種認證方式。請依用途選擇。

## 認證方式

| 方式                       | 主要用途          | 需要 Copilot 訂閱 | 備註                       |
| ------------------------ | ------------- | ------------- | ------------------------ |
| GitHub 登入（CLI）           | 開發、手動執行       | 需要            | 使用 `copilot` CLI 的登入資訊   |
| OAuth GitHub App / PAT   | 每位使用者的 token  | 需要            | 透過 `github_token` 指定     |
| 環境變數                     | CI/CD、伺服器運作   | 需要            | `COPILOT_GITHUB_TOKEN` 等 |
| BYOK（Bring Your Own Key） | 自備模型 provider | 不需要           | 自訂 provider 設定           |

關於 BYOK 請參考 [Custom providers](/zh-TW/packages/laravel-copilot-sdk/custom-providers)。

## GitHub 登入（CLI）

若 `copilot` 或 `gh` CLI 已登入，且未指定其他選項，將使用已儲存的認證資訊。

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

$response = Copilot::run(prompt: 'Hello');
```

## OAuth GitHub App / PAT

將透過 OAuth 流程取得的使用者 access token 或 Fine-grained PAT 傳入 `github_token`。

* 預期為 `gho_` / `ghu_` / `github_pat_`
* 不建議使用 `ghp_`（Classic PAT）

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

$config = array_merge(config('copilot'), [
    'github_token' => $user->github_token,
]);

$response = Copilot::useStdio($config)->run(prompt: '...');
Copilot::stop();
```

指定 `github_token` 時 `use_logged_in_user` 會自動變為 `false`。若想明確切換，可如下設定。

```php theme={null}
$config = [
    'github_token' => $user->github_token,
    'use_logged_in_user' => true,
];
```

詳情請參考 [GitHub token](/zh-TW/packages/laravel-copilot-sdk/github-token)。
`github_token` 與 `use_logged_in_user` 僅於 stdio 模式可用。TCP 模式下需在 Copilot CLI 端已完成認證。

## 環境變數

透過環境變數傳遞 token 時，CLI 會自動偵測。優先順序由上而下：

1. `COPILOT_GITHUB_TOKEN`
2. `GH_TOKEN`
3. `GITHUB_TOKEN`

```dotenv theme={null}
COPILOT_GITHUB_TOKEN=github_pat_xxx
```

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

$response = Copilot::run(prompt: 'Hello');
```

TCP 模式時，請於 CLI 伺服器端設定環境變數。

## 認證的優先順序

SDK 會依下列順序解析認證資訊。

1. `github_token`（明確指定）
2. 環境變數 token（`COPILOT_GITHUB_TOKEN` → `GH_TOKEN` → `GITHUB_TOKEN`）
3. CLI 中已儲存的 OAuth 認證資訊
4. `gh` CLI 的認證資訊

## 停用自動登入

若不希望使用已儲存的認證資訊，可將 `use_logged_in_user` 設為 `false`。

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

$response = Copilot::useStdio([
    'use_logged_in_user' => false,
])->run(prompt: 'Hello');
```

與 `github_token` 相同，僅支援 stdio 模式。TCP 模式下需在 Copilot CLI 端已完成認證。

## 確認認證狀態

可透過取得 `auth.getStatus` 的結果來確認。

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

$status = Copilot::client()->getAuthStatus();

if (! $status->isAuthenticated) {
    // 未認證
}
```

<Info>
  最新資訊請參考 [GitHub 儲存庫](https://github.com/invokable/laravel-copilot-sdk)。
</Info>


## Related topics

- [GitHub Actions - GitHub Copilot SDK for Laravel](/zh-TW/packages/laravel-copilot-sdk/github-actions.md)
- [GitHub Copilot SDK for Laravel](/zh-TW/packages/laravel-copilot-sdk/index.md)
- [開始使用 - GitHub Copilot SDK for Laravel](/zh-TW/packages/laravel-copilot-sdk/getting-started.md)
- [Laravel Cloud - GitHub Copilot SDK for Laravel](/zh-TW/packages/laravel-copilot-sdk/laravel-cloud.md)
- [GitHub Token](/zh-TW/packages/laravel-copilot-sdk/github-token.md)
