> ## 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 token

> 说明如何在 Laravel Copilot SDK 中在运行时切换每个用户的 GitHub token。

## 在运行时切换用于认证的 GitHub token

如何使用通过 Socialite 等认证的每个用户各自的 GitHub token 来运行 Copilot CLI。

<Note>
  Personal Access Token 需要 `Copilot Requests` 权限。Socialite 的 token 也应满足相同的要求。
  如果无法从 Socialite 获取可用的 token，则采用让用户直接输入 PAT 的方式。
</Note>

该方法仅在 stdio 模式下可用。
TCP 模式下 Copilot CLI 进程会一直运行，因此无法在运行时切换。
在 TCP 模式（`cli_url`）下指定 `github_token` 或 `use_logged_in_user` 会报错。

<Note>
  下面的「每个会话独立的 GitHub token（v0.3.0+）」在 TCP 模式下也可以使用。
</Note>

## `github_token` 选项

SDK 的官方选项。token 会通过环境变量 `COPILOT_SDK_AUTH_TOKEN` 传给 CLI。

```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(); // 以防万一销毁持有用户 token 的客户端
```

## `use_logged_in_user` 选项

指定 `github_token` 后，`use_logged_in_user` 会自动变为 `false`。
这样 CLI 将不使用已保存的 OAuth token 或 `gh` CLI 认证，而只使用显式传入的 token。

也可以显式将 `use_logged_in_user` 设为 `true`。

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

不带 `github_token` 而将 `use_logged_in_user` 设为 `false` 时，会追加 `--no-auto-login` 标志，CLI 不会执行自动登录。

## 每个会话独立的 GitHub token（v0.3.0+）

使用 `SessionConfig` 的 `gitHubToken` 字段，可以在同一 CLI 进程内为每个会话指定不同的 GitHub token（多租户支持）。

由于该 token 会作为 `session.create` JSON-RPC 的参数传递，因此 **stdio 模式和 TCP 模式都可以使用**。即使在 CLI 已经启动的 TCP 模式下，也可以按会话切换 token。

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

$response = Copilot::run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
```

TCP 模式下的使用示例：

```php theme={null}
// CLI 服务器已经启动（TCP 模式）
// 可以为每个会话传入不同的用户 token
$response = Copilot::useTcp(url: 'tcp://127.0.0.1:12345')->run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
```

它与客户端级别的 `github_token`（CLI 进程启动时的 token）是独立工作的。
当你想按会话切换用户 token 时，请使用这个。

<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/auth.md)
- [Laravel Cloud - GitHub Copilot SDK for Laravel](/zh/packages/laravel-copilot-sdk/laravel-cloud.md)
- [GitHub Copilot SDK for Laravel](/zh/packages/laravel-copilot-sdk/index.md)
- [Laravel Package Skeleton — 官方包开发用启动模板](/zh/blog/package-skeleton-introduction.md)
