> ## 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） | 自有的模型提供商    | 不需要        | 自定义提供商配置                 |

BYOK 请参考 [Custom providers](/zh/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 流程获取的用户访问 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/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/packages/laravel-copilot-sdk/github-actions.md)
- [GitHub Copilot SDK for Laravel](/zh/packages/laravel-copilot-sdk/index.md)
- [GitHub token](/zh/packages/laravel-copilot-sdk/github-token.md)
- [快速开始 - GitHub Copilot SDK for Laravel](/zh/packages/laravel-copilot-sdk/getting-started.md)
- [Laravel Cloud - GitHub Copilot SDK for Laravel](/zh/packages/laravel-copilot-sdk/laravel-cloud.md)
